// Testcase from P0512R0 for C++17 NB comment US 20 // { dg-do compile { target c++17 } } template struct same; template struct same {}; template struct A { template A(T&&, U&&, int*); // #1: T&& is not a forwarding reference // U&& is a forwarding reference A(T&&, int*); // #2 }; template A(T&&, int*) -> A; // #3: T&& is a forwarding reference int i; int *ip; A a0{0, 0, ip}; // uses #1 to deduce A and #1 to initialize same> s1; A a2{i, ip}; // uses #3 to deduce A and #2 to initialize same> s2; A a{i, 0, ip}; // { dg-error "" } cannot deduce from #1