Идиоматический способ вызвать ошибку компилятора в ветке 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.


person alfC    schedule 24.11.2020    source источник