blob: 816072d8d3ad6e1e7dd62e9149f37652c0c8c7f3 [file] [log] [blame]
// { dg-do compile { target c++17_only } }
// { dg-options "-fconcepts" }
template<typename T>
concept bool C() { return __is_class(T); }
template<int N>
concept bool Int() { return true; }
template<template<typename> class X>
concept bool Template() { return true; }
void f1(Int) { } // { dg-error "does not constrain a type" }
void f2(Template) { } // { dg-error "does not constrain a type" }
struct S { };
struct S1 {
void f1(auto x) { }
void f2(C x) { }
void f3(auto x) { }
void f3(C x) { }
};
template<C T>
struct S2 {
void f1(auto x) { }
void f2(C x) { }
void h1(auto x);
void h2(C x);
template<C U>
void g(T t, U u) { }
};
int main() {
S s;
S1 s1;
s1.f2(0); // { dg-error "matching" }
S2<S> s2;
s2.f2(0); // { dg-error "matching" }
s2.h2(0); // { dg-error "matching" }
s2.g(s, 0); // { dg-error "matching" }
s2.g(0, s); // { dg-error "matching" }
}