Как проверить тип шаблона на этапе компиляции?
Мне нужно проверить тип шаблона на этапе компиляции. К примеру, я хочу чтоб в качестве шаблонного параметра передавались только типы беззнаковых целых чисел.
Ответы (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
С концептами из 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