Issue 103644
Summary Clang 19 regression with mismatched parameter packs in fold expanded constraint
Labels clang:frontend, c++26, regression:19
Assignees
Reporter CaseyCarter
    Compiling this well-formed program:
```c++
template <class...>
using void_t = void;

template <class...>
struct tuple {};

template <class Tuple1, class Tuple2>
struct helper {};

template <class... Types1, class... Types2>
    requires (requires { typename void_t<Types1, Types2>; } && ...)
struct helper<tuple<Types1...>, tuple<Types2...>> {
    using type = void;
};

template <class>
concept False = false;

template <class First, class... Rest>
struct tuple<First, Rest...> : private tuple<Rest...> {
    template <False Other>
 friend auto f(const tuple&, const Other&) -> helper<tuple, Other>::type;
};

template <class... Types1, class... Types2>
void_t<void_t<Types1, Types2>...> f(const tuple<Types1...>&, const tuple<Types2...>&);

int main() {
    using T = tuple<int, int>;
 f(T{}, T{});
}
```
with clang 19.1.0-rc2 in `-std=c++26` mode diagnoses:
```
repro.cpp:9:55: error: pack expansion contains parameter packs 'Types1' and 'Types2' that have different lengths (1 vs. 2)
    9 | (requires { typename void_t<Types1, Types2>; } && ...)
      | ~~~~~~  ~~~~~~        ^
repro.cpp:19:12: note: while checking constraint satisfaction for class template partial specialization 'helper<int, int, int>' required here
   19 |     friend helper<tuple, Other>::type f(const tuple&, const Other&) {}
      | ^~~~~~
repro.cpp:19:12: note: during template argument deduction for class template partial specialization 'helper<tuple<Types1...>, tuple<Types2...>>'
      [with Types1 = <int>, Types2 = <int, int>]
repro.cpp:19:12: note: in instantiation of template class 'helper<tuple<int>, tuple<int, int>>' requested here
repro.cpp:28:5: note: while substituting deduced template arguments into function template 'f' [with Other = T]
   28 |     f(T{}, T{});
      |     ^
1 error generated.
```
The current release versions of the "big 3" compile this program just fine (https://godbolt.org/z/e71q4Eqhr), as does Clang 19.1.0-rc2 in  c++20 and c++23 modes.
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to