c++ - ejemplo - auto en c
Decltype resultado deducido de la funciĆ³n definida en la clase (1)
En el primer fragmento de código, podemos deducir el tipo de retorno (efectivo), porque la definición se proporciona en ese punto léxico y, a la inversa, no funcionará si las definiciones se intercambian de forma léxica , lo que está en [dcl.spec.auto]/10 con [dcl.spec.auto]/10 , ya que debemos rechazar la deducción cíclica.
Con respecto al segundo fragmento, vea el problema central 945 , que reabrió efectivamente el problema central 643 y se ocupa de que se use en los tipos de retorno final, 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 (nuevamente dado el orden correcto de las definiciones), pero tenga en cuenta el problema abierto 1890 ; Los proveedores aplazan la implementación de cosas cuestionables hasta que se confirmen.
Por que
struct MyStruct {
auto foo () { return 1; }
auto bar () { return foo(); }
};
compilar, pero cuando se usa un tipo de retorno final como el siguiente:
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 correcto comportamiento por parte de las implementaciones?