https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117530

            Bug ID: 117530
           Summary: Mismatch of lambda type with itself in recursive alias
                    declaration
           Product: gcc
           Version: 14.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: nshead at gcc dot gnu.org
  Target Milestone: ---

The following testcase based off the testcase in PR86171 fails starting with
GCC14 (it worked in GCC13):

  template <class> struct A;
  template <class T> using B = decltype([]() -> A<T>::X { return 0; });
  template <class T> struct A {
    typedef int X;
    typedef B<T> U;
  };
  B<short> b;

$ g++ -std=c++20 test.cpp

test.cpp: In substitution of ‘template<class T> using B = decltype (<lambda>)
[with T = short int]’:
test.cpp:7:8:   required from here
    7 | B<short> b;
      |        ^
test.cpp:2:26: error: conflicting declaration ‘using B = struct<lambda()>’
    2 | template <class T> using B = decltype([]() -> A<T>::X { return 0; });
      |                          ^
test.cpp:2:26: note: previous declaration as ‘using B = struct<lambda()>’

Reply via email to