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

            Bug ID: 107118
           Summary: "does not name a type" when used in constrained struct
                    specialization
           Product: gcc
           Version: 12.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: lhlaurini at hotmail dot com
  Target Milestone: ---

This is similar to bug 92944. The following code fails to compile:

namespace N { template <class T> struct Q; struct S; }
template <class T> requires false struct N::Q<T> { S& x; };
template <class T> requires true struct N::Q<T> { S& x; };

with

<source>:3:52: error: 'S' does not name a type
    3 | template <class T> requires false struct N::Q<T> { S& x; };
      |                                                    ^

If I change it to:

namespace N { template <class T> struct Q; struct S; }
template <class T> requires false struct N::Q<T> { S& x; };
template <class T> requires true struct N::Q<T> { N::S& x; };

then it works.

Tested locally on GCC 12.2.0 and on https://godbolt.org/z/M7rEEb1Y1.
  • [Bug c++/107118] New: "does... lhlaurini at hotmail dot com via Gcc-bugs

Reply via email to