Есть несколько способов сделать это. Вы можете использовать SFINAE , чтобы ограничить шаблон типами без указателей, такими как
template <typename T, std::enable_if_t<!std::is_pointer_v<T>, bool> = true>
class MyClass{
//...
T payload;
//...
};
Но это может привести к довольно сложным для понимания ошибкам компилятора. Используя static_assert
, вы можете добавить свое собственное сообщение об ошибке, например
template <typename T>
class MyClass {
//...
static_assert(!std::is_pointer_v<T>, "MyClass<T> requires T to be a non pointer type");
T payload;
// ...
};