Даже неинстанцированные части шаблона должны быть действительным кодом C ++. static_assert(false)
делает программу некорректной. Таким образом, у вас есть специализация с static_assert
, которая на момент компиляции известна как false
, и ваша программа становится плохо сформированной. У вас нет неразрешенных параметров шаблона в вашем классе, который используется в static_assert
, чтобы удивить компилятор; он точно знает, что это false
.
То же самое относится к if constexpr
, вы также не можете использовать static_assert
с выражениями, о которых известно, что они ложные, даже если часть, в которой находится static_assert
, всегда отбрасывается.