https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106211
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- The question comes about variadic templates and deduction of auto. >Further, all three compilers also accept this minor modification: This one does need any deduction though so it is not even related. So let's take the slightly reduced testcase: template<typename, typename> concept any = true; auto t = []<typename... Ts>(Ts...) { return [](any<Ts> auto... b, auto c) {return c;}; }(1); auto t1 = t(2, 3); We have now: Ts being <int> so we get: return [](any<int> auto, auto) {}; Which is invalid as any<int> is invalid. Maybe I misunderstand how this works though. If we remove the any<Ts> then we get the same failure for clang as GCC: <source>:7:11: error: no matching function for call to object of type '(lambda at <source>:5:12)' auto t1 = t(2, 3); ^ <source>:5:12: note: candidate function [with b:auto = <>, c:auto = int] not viable: requires single argument 'c', but 2 arguments were provided return [](auto... b, auto c) {return c;}; ^ Which is to say the problem is the way variadic templates with auto is being handled. I suspect the concept is being handled incorrectly for clang.