遇到一些在GCC和Clang上编译的代码出现问题,而不是MSVC (VS2022)。看起来类似于这,但这是几年前的事了,这个问题是由于在方法模板中使用derived_from_specialization_of而引起的,所以我不确定这是否是同一个问题。
我想知道这是什么原因,以及问题是与我的代码或MSVC。
示例:
#include <concepts>
template <template <class...> class Template, class... Args>
void derived_from_specialization_impl(const Template<Args...>&);
template <class T, template <class...> class Template>
concept derived_from_specialization_of = requires(const T& t) {
derived_from_specialization_impl<Template>(t);
};
template <class T>
class A
{
public:
A() = default;
};
template <derived_from_specialization_of<A> T>
class B;
template <derived_from_specialization_of<B> T>
class C
{
public:
C() = default;
};
template <derived_from_specialization_of<A> T>
class B
{
public:
B() = default;
template <derived_from_specialization_of<B> U>
C<U> Foo();
template <derived_from_specialization_of<B> U>
C<U> Bar()
{
return C<U>();
}
};
template <derived_from_specialization_of<A> T>
template <derived_from_specialization_of<B> U>
C<U> B<T>::Foo()
{
return C<U>();
}发布于 2022-05-29 17:06:58
这是什么原因,如果问题是我的代码或MSVC。
这似乎是MSVC中的一个bug。您正确地为成员函数模板提供了类外定义 Foo<>。
使用auto和尾随返回类型,似乎无法解决msvc中的问题。您可以为此提交一个错误报告。
https://stackoverflow.com/questions/72425473
复制相似问题