这是有效的C++代码吗?(在声明范围之外使用本地类型)
Is this valid C++ code? (Using local type outside scope of declaration)
根据(任何(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似乎很奇怪。
是的。
它实际上是作用域内类型的名称,而不是类型本身。
你没有使用它的名字,所以一切都很好。
相关文章:
- 如何计算数据类型的范围,例如int
- ";结果类型必须是可从输入范围的值类型""构造的;创建std::vector时
- 将超出范围的整数分配给有符号字符类型
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 将使用/类型定义限制为类范围
- 类型不可知的抽象以使用相同的运行时接口处理正向和反向迭代器和范围?
- 为什么基于范围类型的大括号上循环init列表是非法的c++
- 连接到MS SQL的程序类型超出范围
- C++数据类型 s 及其范围
- 类型大小与其值范围之间的关系?
- C++,"由于数据类型范围有限,比较总是正确的"
- C++中最大的数据类型范围
- 如何修复错误,迭代器未在此范围内声明,并且迭代器未命名类型'
- 如何计算浮点数据类型的范围、最大值、最小值
- 在 c++ 中确定某个值是否在该数据类型的最大范围内
- C++参数类型以接受适用于基于范围的 for 循环的所有序列
- 范围分辨率运算符在类型:: var的情况下返回什么
- Qt 信号插槽类范围类型
- 是否可以根据基于的范围类型调用不同的取消引用运算符重载
- 将变量(数组类型)从函数传递到"main"范围类型:标准::tr1::match_results<标准::字符串::const_iterator>