【发布时间】:2020-09-07 12:49:57
【问题描述】:
例如我有一些模板类:
template <typename T, typename = void>
struct A {
void Print() {
static_assert(false, "fall into unsupported Print function");
}
};
// an instantiation if T is a unsigned type
template <typename T>
struct A<T, typename std::enable_if_t<std::is_unsigned<T>::value>> {
void Print() {
std::cout << "A<int>" << std::endl;
}
};
但由于标准:
如果无法为模板定义生成有效的特化, 并且该模板未实例化,模板定义为 格式不正确,无需诊断。
无论模板类是否被实例化,clang 都会立即停止编译并显示失败,这不是我的本意。
我尝试了其他方法,例如添加 constexpr bool 函数以返回 false,但都失败了。
那么有什么技巧可以让static_assert 仅在模板类被实例化时触发?
【问题讨论】:
-
欺骗是针对
if constexpr,但同样的答案适用于模板专业化。