https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116439
Patrick Palka <ppalka at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |INVALID Status|UNCONFIRMED |RESOLVED --- Comment #2 from Patrick Palka <ppalka at gcc dot gnu.org> --- I believe GCC 14 is behaving correctly according to the standard now. According to https://eel.is/c++draft/expr.prim.lambda#capture-note-7, decltype(source) must be S not S&, despite the by-ref capture. And a decltype(auto) deduced return type is equivalent decltype(return-expr), so it must deduce to S here as well. GCC's previous behavior was inconsistent and incorrect in the decltype(auto) case. Doing an init-capture [&source = source] yields S& because in that case there is no "original entity" (the init-capture is its own independent entity), and the note doesn't apply, I think. See also https://stackoverflow.com/questions/33854388/decltypeauto-deduced-return-type-from-lambda-capture