我发现自己有这种类型的代码,
template<class T>
void f(T const& t){
if constexpr(std::is_same<T, double>{}) call_a(t); // call_a only compiles for double
else if constexpr(std::is_same<T, float >{}) call_b(t); // call_b only compiles for float
else assert(0 && "not implemented");
}
产生编译器错误而不是运行时错误的惯用方法是什么?(一个硬错误就可以了。)
我虽然这会工作,
else static_assert(0, "not implemented");
但它使代码无条件地无法编译。
当然,我可以在条件之外添加,static_assert(std::is_same<T, double>{} or std::is_Same<T, float>
但基本上我是在重复 if 语句中的条件。