您可能知道 static_assert 不关心它是否在 if constexpr 的“活动”分支内(它总是“运行”)。
我有一个 hack 解决方法,它使用无效的数组维度来触发错误,但它很难看。C++20 中有更好的解决方案吗?
// does not work
template<typename T>
void argh(){
if constexpr(sizeof (T)<123456 ) {
} else {
static_assert(0);
}
}
// works but confusing to novice programmers, both code and error
template<typename T>
void meh(){
if constexpr(sizeof (T)<123456 ) {
} else {
int error_triggering[-sizeof(T)];
}
}