// PR c++/102753
// { dg-do compile { target c++20 } }
// { dg-options "" }

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 auto baz () { return foo; }
consteval auto qux () { return &S::foo; }
consteval auto corge () { return &S::bar; }

constexpr int
bar ()
{
  S s;
  if consteval {			// { dg-warning "'if consteval' only available with" "" { target c++20_only } }
    constexpr auto fn1 = foo;		// { dg-error "immediate evaluation returns address of immediate function" }
    constexpr auto fn2 = &foo;		// { dg-error "immediate evaluation returns address of immediate function" }
    constexpr auto fn3 = &S::foo;	// { dg-error "immediate evaluation returns address of immediate function" }
    constexpr auto fn4 = &S::bar;	// { dg-error "immediate evaluation returns address of immediate function" }
    constexpr auto fn5 = baz ();	// { dg-error "immediate evaluation returns address of immediate function" }
    constexpr auto fn6 = qux ();	// { dg-error "immediate evaluation returns address of immediate function" }
    constexpr auto fn7 = corge ();	// { dg-error "immediate evaluation returns address of immediate function" }
    return fn1 () + fn2 () + (s.*fn3) () + (s.*fn4) () + fn5 () + (s.*fn6) () + (s.*fn7) ();
  }
  return 0;
}

auto a = bar ();
