Recientemente, un alumno me preguntó sobre un problema de compilación. La respuesta fue bastante simple, pero ahora estoy luchando por el motivo. Un ejemplo sencillo:Búsqueda de tipo de letra del parámetro de retorno
#include <iostream>
#include <vector>
struct MyStruct
{
typedef std::vector<int> MyIntVector;
MyIntVector CopyVector(MyIntVector const& vector);
};
MyStruct::MyIntVector MyStruct::CopyVector(MyIntVector const& vector)
^^^^^^^^
{
MyIntVector vec;
return vec;
}
int main(int /*argc*/, char** /*argv*/)
{
MyStruct st;
}
Para ser válido el código C++ parámetro de retorno tiene que ser completo. Tanto para la respuesta y para hacer feliz al compilador/alumno.
¿Pero por qué el valor de retorno debe calificarse con la clase y el parámetro para la función no?
Siempre lo hice y sé que tiene que ver con la búsqueda de ADL, pero ahora que me lo pidieron, busqué una mejor respuesta.
¿Alguien puede darme una referencia a la especificación o una pista donde puedo encontrar algo más de información?
Y no puede haber varias funciones * * Al igual que las declaraciones que muestran en su ejemplo. Para las declaraciones de amigos, esto también es realmente válido, semánticamente, creo: 'struct C {friend void A :: f(), B :: f(); }; '. –