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

            Bug ID: 118624
           Summary: in-class template declaration failed to match
                    out-class impl
           Product: gcc
           Version: 14.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: shyeyian at petalmail dot com
  Target Milestone: ---

struct test
{
    template < int x > 
    int fun() 
        requires (x == 1);

    int x();
};

template < int x >
int test::fun() 
    requires (x == 1)
{
    return 42;
}

int main ( )
{

}

==========================

Compilation failed (with g++ --version == 14.2)
main.cpp:12:16: error: invalid use of member 'test:()' (did you forget the '&'
?)
   12 |     requires ( x == 1 )
      |                ^
main.cpp:11:5: error: no declaration matches 'int test::fun() requires 
<erroneous-expression>'
   11 | int test::fun()
      |     ^~~~
main.cpp:4:9: note: candidate is: 'template<int x> int test::fun() requires  x
== 1'
    4 |     int fun()
      |         ^~~
main.cpp:1:8: note: 'struct test' defined here      
    1 | struct test
      |        ^~~~

On clang++ it works good.

Reply via email to