C++17 Visual Studio 中基于 for 循环的广义范围
C++17 Generalized Range Based For Loops in Visual Studio
>Visual Studio 2017声称他们支持基于C++17范围的循环。 但是,当我尝试编译时,我收到错误,指示它使用的是 C++11 样式。 有没有人设法让哨兵循环在VS 2017中工作?
下面是一些示例代码。 我已经删除了这段代码以使其简短,因此它显然无法正常工作,但它应该编译。
struct MyExampleIterator
{
int operator*() const { return 0; }
MyExampleIterator& operator++() { return *this; }
};
class MyExampleSentinel {};
bool operator!=(const MyExampleIterator& a, const MyExampleSentinel& b) { return true; }
struct MyExampleRange
{
MyExampleIterator begin() { return MyExampleIterator(); }
MyExampleSentinel end() { return MyExampleSentinel(); }
};
如果我尝试在VS2017(15.2(中基于for循环的范围内使用此类,我会得到error C3538: in a declarator-list 'auto' must always deduce to the same type
MyExampleRange range;
for (auto i : range) {} // error C3538
但是如果我手动构造 C++17 标准代码,它可以很好地编译:
// Compiles fine
MyExampleRange range;
{
auto && __range = range;
auto __begin = __range.begin();
auto __end = __range.end();
for (; __begin != __end; ++__begin) {
auto i = *__begin;
}
}
问题是,当我使用VS2017时,该项目仍然针对VS2015。 重定向到 2017 年后,它编译得很好。
感谢您的帮助。 它在 15.6 中编译的报告让我在更新到 15.6 后开始挖掘其他答案,但它仍然没有编译。 谢谢。
相关文章:
- 在基于范围的for循环中使用结构化绑定声明
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 为什么基于循环范围不直接在C 中使用参数阵列
- 为什么这个循环变量在循环范围之外是可访问的
- 在基于范围的循环范围内的双/整数使用和数据缩小
- 是cbegin/Cend不足以使循环范围
- 变量循环范围会导致返回局部变量的地址引用
- 地图元素上的循环范围
- 使用基于自动的范围用于循环VS,使用对循环范围的基于对的范围
- 访问 C++ 中 if 循环范围之外的矢量
- 循环范围内的初始值设定项列表
- 用于循环范围范围
- 为什么需要两个循环范围来更改C++向量的这些元素
- 在下一个循环之前访问基于 for 循环范围的下一个元素
- 在循环范围之外声明参数是否更有效?
- 循环范围拆分中的变量预评估
- 为什么我的循环范围不会改变元素?
- 我的循环范围不起作用
- 循环范围在使用索引元素时不起作用
- 对基于循环范围的误解