// PR c++/102753 | |
// { dg-do compile { target c++20 } } | |
struct S { | |
constexpr S () : s (0) {} | |
consteval int foo () { return 1; } | |
virtual consteval int bar () { return 2; } | |
int s; | |
}; | |
consteval int foo () { return 42; } | |
consteval int | |
bar (int (*fn) () = &foo) | |
{ | |
return fn (); | |
} | |
consteval int | |
baz (int (S::*fn) () = &S::foo) | |
{ | |
S s; | |
return (s.*fn) (); | |
} | |
consteval int | |
qux (int (S::*fn) () = &S::bar) | |
{ | |
S s; | |
return (s.*fn) (); | |
} | |
static_assert (bar () == 42); | |
static_assert (baz () == 1); | |
static_assert (qux () == 2); |