tipo definido en función libre, accesible a través de auto exterior. ¿Error de idioma o función?
Definamos una clase dentro de una función libre y accedamos afuera:
#include <iostream>
auto myFunc(){
class MyType{public: int i = 0; int j = 1;};
return MyType();
}
int main() {
auto my_type = myFunc();
std::cout << my_type.i << " " << my_type.j << "\n";
return 0;
}
Se compila, se ejecuta como se esperaba:
0 1
El nombre MyType está oculto correctamente: si reemplazamos auto, no se compilará lo siguiente:
int main() {
MyType my_type = myFunc();
std::cout << my_type.i << " " << my_type.j << "\n";
return 0;
}
¿Qué dice la norma al respecto?
¿Cómo prevenirlo? El siguiente código no ayudó:
namespace{
auto myFunc(){
class MyType{public: int i = 0; int j = 1;};
return MyType();
}
}
int main() {
auto my_type = myFunc();
std::cout << my_type.i << " " << my_type.j << "\n";
// your code goes here
return 0;
}