考虑下面的代码,它试图实现class Bar的部分专门化。在第一种情况下,foo成员函数是内联定义的,而在第二种情况下是在行外定义的。行外定义产生了一个编译错误,我不能确定:
error: out-of-line definition of 'foo' from class 'Bar<T>' without definition
template<class T>
struct Bar;
template<class T>
requires std::is_same_v<T, int>
struct Bar<T> {
int foo(T a) {
return a + 5;
}
};
template<class T>
requires std::is_same_v<T, double>
struct Bar<T> {
double foo(T a);
};
template<class T>
requires std::is_same_v<T, double>
double Bar<T>::foo(T a) {
return a + 5;
};我正在使用带有c++20编译选项的clang-11。我不确定这是我的误解,功能或错误。任何帮助都是非常感谢的。
发布于 2021-10-18 06:19:04
可能是粘虫。这是在https://bugs.llvm.org/show_bug.cgi?id=50276上报道的。不管怎样,GCC很好。
https://stackoverflow.com/questions/69609483
复制相似问题