| // P0595R2 |
| // { dg-do compile { target c++14 } } |
| |
| namespace std { |
| constexpr inline bool |
| is_constant_evaluated () noexcept |
| { |
| return __builtin_is_constant_evaluated (); |
| } |
| } |
| |
| int a; |
| |
| constexpr bool |
| foo (int x) |
| { |
| return __builtin_constant_p (x); |
| } |
| |
| constexpr bool |
| bar (int x) |
| { |
| return __builtin_constant_p (x + a); |
| } |
| |
| static_assert (__builtin_constant_p (0) + 2 * std::is_constant_evaluated () == 3, ""); |
| static_assert (__builtin_constant_p (a) + 2 * std::is_constant_evaluated () == 2, ""); |
| static_assert (foo (0) + 2 * std::is_constant_evaluated () == 3, ""); |
| static_assert (bar (0) + 2 * std::is_constant_evaluated () == 2, ""); |