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