首页 > 解决方案 > 在 if constexpr 分支中产生编译器错误的惯用方法

问题描述

我发现自己有这种类型的代码,

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 语句中的条件。

标签: c++c++17assertstatic-assertif-constexpr

解决方案


推荐阅读