为什么概念类模板特化会导致错误

Sil*_*cer 2 template-specialization class-template c++-concepts c++20 gcc10

我尝试使用 gcc 10 构建以下内容-std=gnu++20 -fconcepts

\n\n
template <std::signed_integral T>\nclass MyClass{ T a; };\n\ntemplate <std::unsigned_integral T>\nclass MyClass{ T a; };\n
Run Code Online (Sandbox Code Playgroud)\n\n

为什么这段代码会导致以下错误?

\n\n
> declaration of template parameter \xe2\x80\x98class T\xe2\x80\x99 with different constraints\n> 55 | template <std::unsigned_integral T>\n>       |           ^~~\n
Run Code Online (Sandbox Code Playgroud)\n\n

应该没问题吧?

\n

bol*_*lov 5

应该没问题吧?

不,约束不会使类“可重载”。您仍然需要一个主模板,然后需要专门化该模板:

template <std::integral T>
class MyClass;

template <std::signed_integral T>
class MyClass<T>{ T a; };

template <std::unsigned_integral T>
class MyClass<T>{ T a; };
Run Code Online (Sandbox Code Playgroud)