| // PR c++/93633 |
| // { dg-do compile { target c++20 } } |
| |
| struct A { |
| constexpr A () : a (0) {} |
| virtual int foo () { return 1 + a * 4; } |
| int a; |
| }; |
| |
| struct B : A { |
| constexpr B () : b (0) {} |
| virtual int foo () { return 0 + b * 4; } // { dg-message "declared here" "" { target { ! implicit_constexpr } } } |
| int b; |
| }; |
| |
| constexpr int |
| foo () |
| { |
| A *a = new B (); |
| a->a = 4; |
| int r = a->foo (); // { dg-error "call to non-.constexpr. function" "" { target { ! implicit_constexpr } } } |
| delete a; |
| return r; |
| } |
| |
| constexpr auto a = foo (); |