g++ 愉快地接受以下代码,而 clang 和 msvc 能够匹配行外定义。
知道为什么吗?
template <bool B>
struct test
{
test() requires (B);
test() requires(!B);
};
template <>
test<true>::test()
{}
template <>
test<false>::test()
{}
int main()
{
test<false> a;
test<true> b;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
铛:
错误:超出行的“定义
test
”不匹配中的任何声明“test<true>
”
msvc:
错误 C2244:“
test<true>::test
”:无法将函数定义与现有声明匹配