Static_assert внутри, если constexpr не сбрасывается

Следующие static_assert следует отбросить, находясь в ложной ветви if constexpr, однако компиляция не удалась из-за ошибки подтверждения:

#include <type_traits>                                                                                                                                                                              

template <class T>                                                                                                                                                                                  
constexpr bool f() {                                                                                                                                                                                
  if constexpr (std::is_same<T, int>::value) return true;                                                                                                                                                                                                                                                                    
  else static_assert(false, "message");                                                                                                                                                             
}                                                                                                                                                                                                   

int main () {                                                                                                                                                                                       
  if constexpr (f<int>()) return 1;                                                                                                                                                                 
  return 0;                                                                                                                                                                                         
} 

Я ожидаю, что отброшенная ветвь if constexpr не будет оцениваться, потому что f создается с типом int,

Скомпилировано с Gcc 7.2 (-std= C++17)

0 ответов

Другие вопросы по тегам