| // RUN: %clang_cc1 -std=c++14 -verify=both,expected %s -fexperimental-new-constant-interpreter |
| // RUN: %clang_cc1 -std=c++14 -verify=both,ref %s |
| |
| |
| |
| constexpr int(*null_ptr)() = nullptr; |
| constexpr int test4 = (*null_ptr)(); // both-error {{must be initialized by a constant expression}} \ |
| // both-note {{evaluates to a null function pointer}} |
| |
| struct E { |
| int n = 0; |
| struct { |
| void *x = this; |
| }; |
| void *y = this; |
| }; |
| constexpr E e1 = E(); |
| static_assert(e1.x != e1.y, ""); |
| constexpr E e2 = E{0}; |
| static_assert(e2.x != e2.y, ""); |
| |
| struct S { |
| int &&a = 2; |
| int b[1]{a}; |
| }; |
| constexpr int foo() { |
| S s{12}; |
| return s.b[0]; |
| } |
| static_assert(foo() == 12, ""); |