<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/61415>61415</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            False positive error: pack expansion contains parameter pack '_UTypes' that has a different length (1 vs. 2) from outer parameter packs
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          Romain-Geissler-1A
      </td>
    </tr>
</table>

<pre>
    Hi,

This is an issue similar #58452, actually the snippet I posted in this issue is the same. Using libstc++'s 13 tuple implementation is still not possible when using `-std=c++2b`:

```
#include <tuple>

void g(std::tuple<std::tuple<int, int>>);

void f() 
{
 g(std::forward_as_tuple<std::tuple<int, int>>({0, 0}));
}
```

Godbolt output (https://godbolt.org/z/Meca376M6):
```
In file included from <source>:1:
/opt/compiler-explorer/gcc-snapshot/lib/gcc/x86_64-linux-gnu/13.0.1/../../../../include/c++/13.0.1/tuple:691:2: error: pack expansion contains parameter pack '_UTypes' that has a different length (1 vs. 2) from outer parameter packs
        using __convertible = __and_<is_convertible<_UTypes, _Types>...>;
 ^~~~~
/opt/compiler-explorer/gcc-snapshot/lib/gcc/x86_64-linux-gnu/13.0.1/../../../../include/c++/13.0.1/tuple:853:27: note: in instantiation of template type alias '__convertible' requested here
          = _TCC<true>::template __convertible<_Args...>::value;
 ^
/opt/compiler-explorer/gcc-snapshot/lib/gcc/x86_64-linux-gnu/13.0.1/../../../../include/c++/13.0.1/tuple:948:12: note: in instantiation of static data member 'std::tuple<std::tuple<int, int> &&>::__convertible<int &, int &>' requested here
 explicit(!__convertible<_UElements&...>)
 ^
/opt/compiler-explorer/gcc-snapshot/lib/gcc/x86_64-linux-gnu/13.0.1/../../../../include/c++/13.0.1/tuple:2000:36: note: while substituting deduced template arguments into function template 'tuple' [with _UElements = <int, int>]
    { return tuple<_Elements&&...>(std::forward<_Elements>(__args)...); }
 ^
<source>:7:12: note: in instantiation of function template specialization 'std::forward_as_tuple<std::tuple<int, int>>' requested here
    g(std::forward_as_tuple<std::tuple<int, int>>({0, 0}));
           ^
In file included from <source>:1:
/opt/compiler-explorer/gcc-snapshot/lib/gcc/x86_64-linux-gnu/13.0.1/../../../../include/c++/13.0.1/tuple:691:2: error: pack expansion contains parameter pack '_UTypes' that has a different length (1 vs. 2) from outer parameter packs
        using __convertible = __and_<is_convertible<_UTypes, _Types>...>;
 ^~~~~
/opt/compiler-explorer/gcc-snapshot/lib/gcc/x86_64-linux-gnu/13.0.1/../../../../include/c++/13.0.1/tuple:853:27: note: in instantiation of template type alias '__convertible' requested here
          = _TCC<true>::template __convertible<_Args...>::value;
 ^
/opt/compiler-explorer/gcc-snapshot/lib/gcc/x86_64-linux-gnu/13.0.1/../../../../include/c++/13.0.1/tuple:959:12: note: in instantiation of static data member 'std::tuple<std::tuple<int, int> &&>::__convertible<const int, const int>' requested here
 explicit(!__convertible<const _UElements...>)
 ^
/opt/compiler-explorer/gcc-snapshot/lib/gcc/x86_64-linux-gnu/13.0.1/../../../../include/c++/13.0.1/tuple:2000:36: note: while substituting deduced template arguments into function template 'tuple' [with _UElements = <int, int>]
    { return tuple<_Elements&&...>(std::forward<_Elements>(__args)...); }
 ^
<source>:7:12: note: in instantiation of function template specialization 'std::forward_as_tuple<std::tuple<int, int>>' requested here
    g(std::forward_as_tuple<std::tuple<int, int>>({0, 0}));
           ^
2 errors generated.
Compiler returned: 1
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWE2PozgQ_TXOpRQEdvg65JBOOrNzmMtq5owMFMG7xmZtk-6eQ__2lYFM6EmPdmeklVqrjhBJTH3Y75XrCXNrxUkhbkl8R-LDig-u1Wb7u-64UOsPKKyVaNbRblXq-mn7myB0T8IDCXfT_XMrLAgLXIGwdkCwohOSGyCUxdkmpoTugVdu4FI-gWsRrBJ9jw4-Qq-twxqEAjdF8f7CTla8wwC-WKFOIEVpXUXo3XilFiIGbuglguh6iR0qx53QfgZgnZASlHY-uhWlRHhoUcEwRiJJuLauJuwwh6MlSULCdssl-ZHpmv5SJlQlhxqBsP2Yl7D7pcNZixpOhGZj6B1hu9lqfzMglPOA-C927y-aE3Z3E6whNCM0h_lBOlu8TNJo88BNXXBb_ES-jKR3oR8LSXrw6ZczSA-vQzDeP-i61NKBHlw_OCA0a53rrU9Ij4QeT9PzQJsTocevhB4_YcVZmnxKxiSvw_tRQSM8lRPGNTRGdx5pqwdTjVCzXXT1pkfdO0KPle564UsTH3upDRo_g6paW8V722pvIkU5DRJ6fMySItmspVDD4_qkBkKPEQvCICL0GAS3t3k6PtGl8K4OM7q7JPcTo4TtAI3Rxv_oefUn4GPPlfUlWWnluFAWem54hw7NZEFoWnz5_NSjJTQF13IHLbfAoRZNgwaVA4nq5FqPcwRnGwD1FTGio4cpzjKinUtk_kz1XhSVVmc0btwIhB2gKLiqC18ZdvmMsP236eyhmH6x-yAIRgIu9Ufi--fn5-c3SEUWM09F6ilQ2vkh31iEso4rJ6b-oBtw2PWSOwT31CNwKbgduXgBBk3B4F8Dju2pRYMvsYUJyc_7vW8IZpiL1G-7S_Tie3B35mQvaHrLM5febwHsGwQ132R-89F_AtX6_ltBzR2HDrsSfftPf7IbAqGJvy4IfQ-hUG4yGR1gNv0RVR41UQk3NtLoho4v95NuWEKTmRaav2kuaBh6oWLJkoyH1rdOO5TWCTc4v-VrrIcK62uhc3MaxqV62DQ0g6pG3r4ZEJpOSWgKJL57EK6FK0Bjrd8oSXy4bgmS3oFBNxgFF2KLBbwLhG-064XpaFEU3Jwsobn3GaUJvqnSgpmX8pD-qyq9XbntsRJciq-TzbJmf01cf9w3_mPlhkVvuoD0rqzvyvqurG-zm-dx_naUtdLKOphdrn9-WV2nEFcJeRfYd4H9PwosnbTJwgkVGu6wDqYH-7mcZ9bQZ4bo1dffVb1ldc5yvsJtlKRZRtMszlbttgqxSSIe1TyljGVNHIWbJOchjVjKeN6sxJaGlIUs2tAo3ERZQKMkxWaT87LM4ibfkE2IHRcykPLc-bfy1XjCsk2iTRSvJC9R2vHYh1KFD9PxC6GUxIeV2XqfdTmcLNmEUlhnr1GccBK3Ry4tQq-tcOKMb0ClV4OR2-9OJIRrhzKodOcbiDxfvta90X9g5dvKuGpL6HFE5e8AAAD__xA7xMY">