为什么概念性类模板专业化会导致错误

时间:2020-05-09 00:28:35

标签: template-specialization c++20 c++-concepts class-template gcc10

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

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

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

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

> declaration of template parameter ‘class T’ with different constraints
> 55 | template <std::unsigned_integral T>
>       |           ^~~

应该没事吗?

1 个答案:

答案 0 :(得分:3)

应该没事吗?

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

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; };