Я хочу проверить, является ли параметр шаблона структуры фундаментальным или нет. Итак, я создал структуру
template<typename T, typename = std::enable_if<std::is_fundamental_v<T>>>
struct Something {
};
И пустая структура
struct AStruct{
};
Используя is_fundamental
, я ожидал, что моя структура будет «включена» только и только в том случае, если параметр шаблона T
является одним из основных типов, таких как long long int
, float
и другие...
Но когда я делаю специализацию, например
using Defined = Something<AStruct>;
Компилируется нормально, так что я пропустил? или что я сделал не так?
Это должно быть std::enable_if_t<std::is_fundamental_v<T>>
(добавлено _t) или typename std::enable_if<std::is_fundamental_v<T>>::type
.
Вместо этого я бы предложил static_assert
:
Something<AStruct, void>
(также можно исправить с помощью предпочтительного std::enable_if_t<cond, int> = 0
)
Ваш ответ сработал для меня, во всяком случае, теперь я думаю об использовании
static_assert
.