For a small example like this, I want to only accept T
if T
is a struct/class
and reject builtin types like 'int', 'char', 'bool' etc.
template<typename T>
struct MyStruct
{
T t;
};
For a small example like this, I want to only accept T
if T
is a struct/class
and reject builtin types like 'int', 'char', 'bool' etc.
template<typename T>
struct MyStruct
{
T t;
};
You are looking for std::is_class
traits from <type_traits>
header. Which
Checks whether
T
is a non-union class type. Provides the member constant value which is equal totrue
, ifT
is a class type (but not union). Otherwise, value is equal tofalse
.
For instance, you can static_assert
for the template type T
like follows:
#include <type_traits> // std::is_class
template<typename T>
struct MyStruct
{
static_assert(std::is_class<T>::value, " T must be struct/class type!");
T t;
};
In C++20, one can provide a concept using std::is_class
as follows too.
#include <type_traits> // std::is_class
template <class T> // concept
concept is_class = std::is_class<T>::value;
template<is_class T> // use the concept
struct MyStruct
{
T t;
};
© 2022 - 2024 — McMap. All rights reserved.
std::is_class
– Fe