Почему специализация шаблона концептуального класса вызывает ошибку - PullRequest
0 голосов
/ 09 мая 2020

Я попытался построить следующее с помощью g cc 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 Ответ

3 голосов
/ 09 мая 2020

Разве это не должно быть хорошо?

Нет, ограничения не делают классы «перегружаемыми». Вам по-прежнему нужен первичный шаблон, а затем вам нужно специализировать этот шаблон:

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