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

时间:2018-03-08 14:32:45

标签: c++

以下代码是否符合(任何)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;
}

The compilers(Visual Studio 2015,最新的Clang和最新的GCC)接受了这一点,但是decltype应该让我访问Foo似乎很奇怪。

1 个答案:

答案 0 :(得分:5)

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

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