2018-11-07 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / g++.dg / cpp2a / explicit10.C
blobc8701551c9af5b0d383c04a25b1ec3aeed4a88e7
1 // P0892R2
2 // { dg-do compile }
3 // { dg-options "-std=c++2a" }
5 #include <type_traits>
7 class A {};
8 class B : public A {};
9 class C {};
10 class D { public: operator C() { return c; }  C c; };
12 template <typename T1, typename T2>
13 struct S {
14   explicit(!std::is_convertible_v<T1, T2>)
15   S(T1, T2) { }
18 void
19 foo ()
21   A a;
22   B b;
23   C c;
24   D d;
26   S<int, int> s{ 1, 2 };
27   S<int, int> s2 = { 1, 2 };
28   S<B*, A*> s3 = { &b, &a };
29   S<A*, B*> s4 = { &a, &b }; // { dg-error "converting" }
30   S<B*, C*> s5 = { &b, &c }; // { dg-error "converting" }
31   S<D, C> s6 = { d, c };