C++ 是否允许在范围外声明嵌套类对象? #包括 自动f() { 结构A{int f(){return 0;}}; 返回A(); } int main() { std::移除_cvref_t a; 返回a.f(); }

C++ 是否允许在范围外声明嵌套类对象? #包括 自动f() { 结构A{int f(){return 0;}}; 返回A(); } int main() { std::移除_cvref_t a; 返回a.f(); },c++,c++11,inner-classes,private-members,decltype,C++,C++11,Inner Classes,Private Members,Decltype,以上代码可以成功编译。我只是想知道: < > >强> >按照C++标准是否合法?< /强> < /P>是的,它是允许的。这种类型可以使用但不在其自己的范围之外命名,通常被昵称为“Voldemort类型”:)const Auto& F.({StultA{INFF){{Read 0;}};返回A.();}您正在返回ReF tolocal@Quentin为什么呢?或者它只是指出这是不必要的混乱(正如这个问题存在的事实似乎暗示的那样)?@Oppen这是指哈利·波特,在那里伏地魔在宇宙中也被称为不可指名的

以上代码可以成功编译。我只是想知道:


< > >强> >按照C++标准是否合法?< /强> < /P>是的,它是允许的。这种类型可以使用但不在其自己的范围之外命名,通常被昵称为“Voldemort类型”:)const Auto& F.({StultA{INFF){{Read 0;}};返回A.();}您正在返回ReF tolocal@Quentin为什么呢?或者它只是指出这是不必要的混乱(正如这个问题存在的事实似乎暗示的那样)?@Oppen这是指哈利·波特,在那里伏地魔在宇宙中也被称为不可指名的人。这些类型的人远没有那个家伙那么可怕!
#include <type_traits>

auto f()
{
    struct A { int f() { return 0; } };

    return A();
}

int main()
{
    std::remove_cvref_t<decltype(f())> a;

    return a.f();
}