static_assert( std::is_same<T, int>::value || std::is_same<T, float>::value );
решает продемонстрированную проблему.
Как правило, нет, ветвь else
не может содержать static_assert(false)
.Вы можете сделать хаки, чтобы разрешить что-то подобное, но они имеют сомнительную законность.
Возможно, самым простым решением было бы просто не возвращаться из else
, и ваш компилятор предупреждал, когда у вас есть функция, которая неверните значение.
Возможно, вы захотите static_assert(!std::is_same<T,void>{})
, только чтобы поймать этот угловой случай.;)