1 // { dg-do compile } 2 // Origin: Giovanni Bajo <giovannibajo at gcc dot gnu dot org> 3 // DR152: explicit copy constructors 4 5 namespace N1 { 6 struct X { 7 X(); // { dg-message "note" } 8 explicit X(const X&); 9 }; 10 void f(X); // { dg-error "initializing" } foo()11 int foo() 12 { 13 X x; 14 f(x); // { dg-error "matching" "matching" } 15 // { dg-message "candidate" "candidate note" { target *-*-* } 14 } 16 } 17 } 18 19 namespace N2 { 20 template <class T> 21 struct X { 22 X(); // { dg-message "note" } 23 explicit X(const X&); 24 }; 25 26 template <class T> f(T)27 void f(T ) {} // { dg-error "initializing" } 28 29 template <class T> foo()30 int foo() 31 { 32 X<T> x; 33 N2::f(x); // { dg-error "matching" "matching" } 34 // { dg-message "candidate" "candidate note" { target *-*-* } 33 } 35 } 36 37 template int foo<float>(); // { dg-message "required from here" } 38 } 39