https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84368
Bug ID: 84368 Summary: [8 Regression] return type of generic lambda in variadic lambda in template is not deduced Product: gcc Version: 8.0.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: benni.buch at gmail dot com Target Milestone: --- template < typename ... T > void sink(T ...){} template < typename ... T > void foo(T ... v){ [](auto ... v){ auto bar = [](auto, auto){ return 0; }; sink(bar(v, T{}) ...); }(v ...); } int main(){ foo(0); } $ g++ -std=c++14 main.cpp main.cpp: In instantiation of 'foo(T ...) [with T = {int}]::<lambda(auto:1 ...)> [with auto:1 = {int}]': main.cpp:9:6: required from 'void foo(T ...) [with T = {int}]' main.cpp:13:10: required from here main.cpp:8:17: error: use of 'bar' before deduction of 'auto' sink(bar(v, T{}) ...); ~~~^~~~~~~~ $ g++ --version g++ (GCC) 8.0.1 20180213 (experimental) Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Known to work with GCC 5 and 6: $ g++-6 --version g++-6 (Ubuntu/Linaro 6.3.0-18ubuntu2~16.04) 6.3.0 20170519 Copyright (C) 2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ g++-5 --version g++-5 (Ubuntu 5.4.1-2ubuntu1~16.04) 5.4.1 20160904 Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.