111
|
1 // { dg-do run }
|
|
2 // { dg-options "-std=c++17 -fconcepts" }
|
|
3
|
|
4 #include <cassert>
|
|
5
|
|
6 // Check partial ordering during overload resolution.
|
|
7
|
|
8 template<typename T>
|
|
9 concept bool C() { return __is_class(T); }
|
|
10
|
|
11 template<typename T>
|
|
12 concept bool D() { return C<T>() and __is_empty(T); }
|
|
13
|
|
14 struct S1 { } s1;
|
|
15 struct S2 { int n; } s2;
|
|
16
|
|
17 int called = 0;
|
|
18
|
|
19 template<C T> void f1(T x) { called = 1;}
|
|
20 template<D T> void f1(T x) { called = 2;}
|
|
21
|
|
22 int main() {
|
|
23 f1(s1); assert(called == 2);
|
|
24 f1(s2); assert(called == 1);
|
|
25 }
|