这是有效的C++代码吗?(在声明范围之外使用本地类型)

Is this valid C++ code? (Using local type outside scope of declaration)

本文关键字:范围 类型 声明 有效 C++ 代码      更新时间:2023-10-16

根据(任何(C++ISO标准,以下代码是否有效?

#include <functional>
auto a() {
    struct Foo {
    };
    return []() {return Foo{}; };
}
int main()
{
    auto l = a()();
    decltype(l) ll;
    //Foo f; //error: unknown type name 'Foo'
    return 0;
}

编译器(Visual studio 2015,最新的Clang和最新的GCC(接受这一点,但decltype应该让我访问Foo似乎很奇怪。

是的。

它实际上是作用域内类型的名称,而不是类型本身。

你没有使用它的名字,所以一切都很好。