c++, coroutines: Simplify separation of the user function body and ramp.
[official-gcc.git] / gcc / testsuite / g++.dg / cpp1y / pr72759.C
blob5c2fb9fba0b5436db3ff017f0b0d6a08d9165229
1 // PR c++/72759
2 // { dg-do compile { target c++14 } }
4 template <typename> struct SpecPerType;
5 class Specializer {
6   public:  template <bool> static void MbrFnTempl();
7   template <unsigned> struct A { static void InnerMemberFn(); };
8   void Trigger() { A<0>::InnerMemberFn; }
9 };
10 template <> struct SpecPerType<Specializer> {
11   using FnType = void *;
12   template <bool P>
13   static constexpr FnType SpecMbrFnPtr = Specializer::MbrFnTempl<P>;
15 template <unsigned X> void Specializer::A<X>::InnerMemberFn() {
16   using Spec = SpecPerType<Specializer>;
17   Spec ErrorSite = Spec::SpecMbrFnPtr<SpecMbrFnPtr>;  // { dg-error "not declared|invalid" }