decltype resultado deducido de la función definida en clase


¿Por qué

struct MyStruct {
   auto foo () { return 1; }
   auto bar () { return foo(); }
};

Compilar, pero cuando se utiliza un tipo de retorno final como este:

struct MyStruct {
   auto foo () { return 1; }
   auto bar () -> decltype(foo()) { return foo(); }
};

La compilación falla con

Error: la función 'foo' con tipo de retorno deducido no se puede usar antes de que se defina

¿Es este comportamiento correcto por parte de las implementaciones?

Author: Columbo, 2016-12-26

1 answers

En el primer fragmento, podemos deducir el tipo de retorno (efectivo), porque la definición se proporciona en ese punto léxico, y por el contrario no funcionará si las definiciones se intercambian léxicamente, lo que está al unísono con [dcl.spec.auto]/10 , ya que debemos rechazar la deducción cíclica.

Con respecto al segundo fragmento, consulte core issue 945 , que reabrió efectivamente core issue 643 y trata de this que se usa en los tipos de retorno finales, en los que el tipo de clase aún está incompleto. AFAICS, la redacción actual lo permite de la misma manera que en el primer caso (de nuevo dado el orden adecuado de las definiciones), pero mantener la cuestión abierta 1890 en mente; los vendedores posponen la implementación de cosas cuestionables hasta que se confirme.

 11
Author: Columbo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-27 11:44:56