为什么概念 class 模板特化会导致错误
Why does conceptual class template specialization cause an error
我尝试使用 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>
> | ^~~
应该没问题吧?
Shouldn't it be fine?
不,约束不会造成 类 "overloadable"。您仍然需要一个主模板,然后您需要专门化该模板:
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; };
我尝试使用 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>
> | ^~~
应该没问题吧?
Shouldn't it be fine?
不,约束不会造成 类 "overloadable"。您仍然需要一个主模板,然后您需要专门化该模板:
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; };