Как проверить тип шаблона на этапе компиляции?

Мне нужно проверить тип шаблона на этапе компиляции. К примеру, я хочу чтоб в качестве шаблонного параметра передавались только типы беззнаковых целых чисел.


Ответы (1 шт):

Автор решения: user7860670
#include <type_traits>

template<typename x_Unsigned>
struct
t_MyTemplate
{
    static_assert(::std::is_unsigned_v<x_Unsigned>);
};

t_MyTemplate<unsigned int> x; // ok
//t_MyTemplate<int> x; // error
//t_MyTemplate<float> x; // error

online compiler

С концептами из C++ 20:

#include <concepts>

template<::std::unsigned_integral x_Unsigned>
struct
t_MyTemplate
{
};

t_MyTemplate<unsigned int> x; // ok
//t_MyTemplate<int> x; // error
//t_MyTemplate<float> x; // error

online compiler

→ Ссылка