| // Testcase from P1816R0 |
| // { dg-do compile { target c++20 } } |
| |
| template <typename T> |
| struct S { |
| T x; |
| T y; |
| }; |
| |
| S s = { 1, 2 }; |
| |
| template <typename T> |
| struct C { |
| S<T> s; |
| T t; |
| }; |
| template <typename T> |
| struct D { |
| S<int> s; |
| T t; |
| }; |
| C c1 = {1, 2}; // { dg-error "" "deduction failed" } |
| C c2 = {1, 2, 3}; // { dg-error "" "deduction failed" } |
| C c3 = {{1u, 2u}, 3}; // { dg-bogus "" "OK, C<int> deduced" } |
| D d1 = {1, 2}; // { dg-error "" "deduction failed" } |
| D d2 = {1, 2, 3}; // { dg-bogus "" "OK, braces elided, D<int> deduced" } |
| template <typename T> |
| struct I { |
| using type = T; |
| }; |
| template <typename T> |
| struct E { |
| typename I<T>::type i; |
| T t; |
| }; |
| E e1 = {1, 2}; // { dg-bogus "" "OK, E<int> deduced" } |