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;
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta