Я оказался с этим типом кода,
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.