// { dg-do compile { target c++17 } } template struct A { using value_type = T; A(value_type); // #1 A(const A&); // #2 A(T, T, int); // #3 template A(int, T, U); // #4 }; // A(A); #5, the copy deduction candidate A x (1, 2, 3); // uses #3, generated from a non-template constructor template A(T) -> A; // #6, less specialized than #5 A a (42); // uses #6 to deduce A and #1 to initialize A b = a; // uses #5 to deduce A and #2 to initialize template A(A) -> A>; // #7, as specialized as #5 A b2 = a; // uses #7 to deduce A> and #1 to initialize template struct same; template struct same {}; same> s1; same> s2; same>> s3;