| // PR c++/87594 |
| // { dg-do compile { target c++14 } } |
| |
| constexpr bool always_false() { return false; } |
| int f() { return 1; } |
| |
| constexpr int |
| fn1() |
| { |
| struct empty_range { |
| constexpr int* begin() { return 0; } |
| constexpr int* end() { return 0; } |
| } e; |
| for (auto x : e) |
| f(); |
| return 0; |
| } |
| |
| constexpr int |
| fn2 () |
| { |
| int a[] = { 1, 2, 3 }; |
| for (auto x : a) |
| f(); // { dg-error "call to non-.constexpr. function" } |
| return 0; |
| } |
| |
| constexpr int |
| fn3 () |
| { |
| __extension__ int a[] = { }; |
| for (auto x : a) |
| f(); |
| return 0; |
| } |
| |
| |
| void |
| bar () |
| { |
| constexpr int i1 = fn1 (); |
| constexpr int i2 = fn2 (); // { dg-message "in .constexpr. expansion of " } |
| constexpr int i3 = fn3 (); |
| } |