111
|
1 // Testcase from P0512R0 for C++17 NB comment US 20
|
131
|
2 // { dg-do compile { target c++17 } }
|
111
|
3
|
|
4 template <class,class> struct same;
|
|
5 template <class T> struct same<T,T> {};
|
|
6
|
|
7 template<class T> struct A {
|
|
8 template<class U>
|
|
9 A(T&&, U&&, int*); // #1: T&& is not a forwarding reference
|
|
10 // U&& is a forwarding reference
|
|
11 A(T&&, int*); // #2
|
|
12 };
|
|
13 template<class T>
|
|
14 A(T&&, int*) -> A<T>; // #3: T&& is a forwarding reference
|
|
15
|
|
16 int i;
|
|
17 int *ip;
|
|
18 A a0{0, 0, ip}; // uses #1 to deduce A<int> and #1 to initialize
|
|
19 same<decltype(a0),A<int>> s1;
|
|
20 A a2{i, ip}; // uses #3 to deduce A<int&> and #2 to initialize
|
|
21 same<decltype(a2),A<int&>> s2;
|
|
22
|
|
23 A a{i, 0, ip}; // { dg-error "" } cannot deduce from #1
|