Pregunta

¿Se permite la deducción de tipo de retorno para las funciones de los miembros en C ++ 14, o solo para funciones gratuitas?

Pregunto porque supuse implícitamente que funcionaría, pero en GCC 4.8.1 obtengo un error de compilador interno ("en gen_type_die_with_usage"). La primera vez que he recibido un error tan críptico como ese, así que soy un poco escéptico; Y sé que han cambiado la especificación desde entonces.

Para mayor claridad, esto funciona para mí:

auto foo() {return 5;}

Pero esto no:

class Bar{
auto baz() {return 5;}
}

¿Está permitido esto en el borrador de estándar?

¿Fue útil?

Solución

Sí, el estándar debería permitirlo de acuerdo con el documento N3582. Aquí hay un ejemplo del documento.

Permitir declaraciones de funciones no definidas con tipo de retorno automático no es estrictamente necesario, pero es útil para codificar estilos que prefieren definir funciones de miembros fuera de la clase:

    struct A {
      auto f(); // forward declaration
    };
    auto A::f() { return 42; }

Y si lo permitimos en esa situación, también debería ser válido en otras situaciones. Permitirlo también es la elección más ortogonal; En general, creo que si la combinación de dos características puede funcionar, debería funcionar.

Según el comentario de @Bamboon, "la deducción de tipo de retorno solo es compatible con GCC 4.9". Entonces eso explicaría por qué no lo tienes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top