我尝试使用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>
> | ^~~
应该没事吗?
答案 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; };