https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115651
Bug ID: 115651
Summary: CTAD: gcc accepts the code which should be rejected.
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: hokein.wu at gmail dot com
Target Milestone: ---
Consider the following code snippet:
```
template<typename T>
struct Out {
template <typename U>
struct Foo {
Foo(U);
};
template <typename Y>
requires false // always return false.
using Alias1 = Foo<Y>;
template <typename Z>
using Alias2 = Alias1<Z>;
};
Out<int>::Alias2 s = 10;
```
The code should be rejected because of the always-false constraint on the
`Alias1`, but gcc accepts it, https://godbolt.org/z/czcsfezrv
If we remove remove the `Out` template class, gcc works as expected.