funciones examples c++ lambda auto c++14

examples - std c++



Variable "auto" utilizada en lambda en su propio inicializador (1)

Creo que esto se encuentra en §7.1.6.4 [dcl.spec.auto] / p11:

Si se necesita el tipo de entidad con un tipo de marcador de posición no deducido para determinar el tipo de expresión, el programa está mal formado.

Necesita el tipo de terminal para determinar el tipo de terminal expresión id en el terminal de return terminal(func(term)); (editado, hat tip @Richard Smith), pero en el punto de esa expresión todavía no se puede deducir el tipo de terminal .

Hoy encontré este código

#include <cstdio> auto terminal = [](auto term) { return [=] (auto func) { return terminal(func(term)); }; };

Sorprendentemente, GCC lo acepta . Clang lo rechaza porque usa el terminal en su propio inicializador y se declara auto .

Esperaba el error que dio el clang, pero ¿está realmente mal formado? ¿O debe el código ser aceptado?