Created attachment 41411 [details] Minimal example code The following invalid code causes an ICE: struct S {}; auto overloaded(S &); template <typename T> int overloaded(T &) { return 0; } template <typename T> auto returns_lambda(T ¶m) { return [&] { overloaded(param); }; } int main() { S s; returns_lambda(s); } On Wandbox: https://wandbox.org/permlink/bU36doHcn0MoXWrK Only gcc versions 7.1 and up seem to be affected. No compiler flags are required.
I managed to create an example that is a valid program: struct Buffer {}; auto parse(Buffer b); template <typename T> void parse(T target); template <typename T> auto field(T target) { return [&] { parse(target); }; } template <typename T> void parse(T target) {} auto parse(Buffer b) { field(0); } int main() { }
Created attachment 41413 [details] Minimal example code (valid)
Author: paolo Date: Fri Oct 13 16:50:13 2017 New Revision: 253733 URL: https://gcc.gnu.org/viewcvs?rev=253733&root=gcc&view=rev Log: 2017-10-13 Paolo Carlini <paolo.carlini@oracle.com> PR c++/80873 * g++.dg/cpp1y/auto-fn41.C: New. * g++.dg/cpp1y/auto-fn42.C: Likewise. Added: trunk/gcc/testsuite/g++.dg/cpp1y/auto-fn41.C trunk/gcc/testsuite/g++.dg/cpp1y/auto-fn42.C Modified: trunk/gcc/testsuite/ChangeLog
Fixed for 7.3.0.