struct,是基础模板,C++

Struct, is fundamental template,C++

我想检查结构的模板参数是否是基本的。 所以我创建了一个结构

template<typename T, typename =  std::enable_if<std::is_fundamental_v<T>>>
struct Something {
};

还有一个空结构

struct AStruct{
};

使用 is_fundamental 我希望只有当模板参数 Tlong long int 、 [=16= 等基本类型之一时,我的结构才会被“启用” ] 和其他人...

但是当我像

这样进行专业化时
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 修复)
  • 你的 class 无论如何都不是 SFINAE 友好的,所以硬错误允许自定义消息。
  • 更简单的语法:)