小编red*_*der的帖子

引导构造函数的外行定义(c++20)

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”:无法将函数定义与现有声明匹配

c++ constructor require c++20

6
推荐指数
1
解决办法
133
查看次数

标签 统计

c++ ×1

c++20 ×1

constructor ×1

require ×1