如果constexpr没有丢弃,则在static_assert里面

时间:2018-03-07 15:21:02

标签: c++ instantiation constexpr static-assert if-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 个答案:

没有答案