| // { dg-do compile { target c++17_only } } |
| // { dg-options "-fconcepts" } |
| |
| template<typename T> |
| concept bool C = __is_class(T); |
| |
| struct X { }; |
| |
| template<typename T> |
| struct Base { |
| Base(double) requires C<T> { } |
| }; |
| |
| struct Ok1 : Base<X> { |
| using Base<X>::Base; |
| }; |
| |
| struct Err1 : Base<int> { |
| using Base<int>::Base; |
| }; |
| |
| template<typename T> |
| struct Generic : Base<T> { |
| using Base<T>::Base; |
| }; |
| |
| |
| int main() { |
| Ok1 x1(0.0); |
| Err1 x2(0.0); // { dg-error "no matching" } |
| Generic<X> x3(0.0); |
| Generic<int> x4(0.0); // { dg-error "no matching" } |
| } |