https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86943
--- Comment #8 from Jonathan Wakely <redi at gcc dot gnu.org> --- The non-normative note in [expr.prim.lambda.closure] p8 does seem to support GCC's semantics. It suggests the returned function pointer is to an invoker function not the operator() itself. The {} initializes the argument of the invoker, which then forwards it to the operator() resulting in a move construction.