Hi Everyone,

I've been trying to use libstdc++ <ranges> from GCC 10.1 with Clang 10.0. Even 
a basic example using `single_view` fails to compile. With some digging, I 
narrowed it down the following example using CRTP:

```
template <typename D>
struct CRTP {
   void call_foo() requires
     requires (D& v) { v.foo();} {
       static_cast<D*>(this)->foo();
   }
};

struct Test: public CRTP<Test> {
   void foo() { }
};

int main()
{
   Test t;
   t.call_foo();
   return 0;
}
```

```
<source>:16:7: error: invalid reference to function 'call_foo': constraints not 
satisfied
   t.call_foo();
     ^
<source>:4:27: note: because 'v.foo()' would be invalid: no member named 'foo' 
in 'Test'
     requires (D& v) { v.foo();} {
                         ^
```

https://godbolt.org/z/jHt2E3

In essence, when Clang checks the requirement it treats the derived class as 
incomplete, even though an instance was constructed on the previous line.

Thanks,
Andrey
_______________________________________________
cfe-users mailing list
cfe-users@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users

Reply via email to