阻止一个模板类被实例化并给出错误信息
注意,这个类作为(不完整)类型出现在别的模板的参数中是可以的,只有访问成员才会出错。
template <typename Target>
struct FindValue<Target, TypeList<>> {
static inline constexpr bool ALWAYS_FALSE = sizeof(Target) == 0;
static_assert(ALWAYS_FALSE, "Unsupported type! Check `proj::detail::DataTypeList`.");
};
https://stackoverflow.com/a/40472836/
任何类型要么是不完整类型,无法被 sizeof 评估(会报错),要么被评估为正整数(包括 void 也会被评估为 1)。用 -1 的话会有类型转换警告,所以用 0 就好了。