145
|
1 // P0892R2
|
|
2 // { dg-do compile }
|
|
3 // { dg-options "-std=c++2a" }
|
|
4
|
|
5 template<int T = 1>
|
|
6 struct S {
|
|
7 explicit(T) S(int);
|
|
8 explicit(!T) S(int, int);
|
|
9 };
|
|
10
|
|
11 template<typename T, int N>
|
|
12 struct S2 {
|
|
13 explicit(N) S2(T);
|
|
14 };
|
|
15
|
|
16 template<typename T>
|
|
17 struct S3 {
|
|
18 explicit((T) 1.0) S3(int);
|
|
19 };
|
|
20
|
|
21 int
|
|
22 main ()
|
|
23 {
|
|
24 S<> s1 = { 1 }; // { dg-error "converting" }
|
|
25 S<true> s2 = { 1 }; // { dg-error "converting" }
|
|
26 S<false> s3 = { 1 };
|
|
27 S<> s4{ 1 };
|
|
28 S<true> s5{ 1 };
|
|
29 S<> s6 = { 1, 2 };
|
|
30 S<true> s7 = { 1, 2 };
|
|
31 S<false> s8 = { 1, 2 }; // { dg-error "converting" }
|
|
32 S<false> s9{ 1, 2 };
|
|
33
|
|
34 const int x = 1;
|
|
35 S<x> s10 = { 1 }; // { dg-error "converting" }
|
|
36 S<x> s11{ 2 };
|
|
37
|
|
38 S2<int, true> s12 = { 1 }; // { dg-error "converting" }
|
|
39
|
|
40 S3<int> s13 = { 1 }; // { dg-error "converting" }
|
|
41 }
|