C++ 范围::编译器资源管理器上MSVC中的子范围
下面的代码编译并运行得很好,但是失败得很惨C++ 范围::编译器资源管理器上MSVC中的子范围,c++,visual-studio,c++17,range-v3,compiler-explorer,C++,Visual Studio,C++17,Range V3,Compiler Explorer,下面的代码编译并运行得很好,但是失败得很惨 #包括 #包括 int main(){ 向量编辑{1,1,3,2,2,4,4,4,4,1,1,3,3,2}; auto xxx=ranges::子范围(edits.begin(),edits.end()); } 是否缺少某些标志?您指定了/std:c++17和。Ranges -V3也需要C++ 20,因为它使用概念。 使用/std:c++最新版本编译成功 这些错误原来来自捆绑在Ranges v3中的概念仿真层,这显然不能在最新的Visual C++的
#包括
#包括
int main(){
向量编辑{1,1,3,2,2,4,4,4,4,1,1,3,3,2};
auto xxx=ranges::子范围(edits.begin(),edits.end());
}
是否缺少某些标志?您指定了
/std:c++17
和。Ranges -V3也需要C++ 20,因为它使用概念。
使用/std:c++最新版本编译成功
这些错误原来来自捆绑在Ranges v3中的概念仿真层,这显然不能在最新的Visual C++的C++17模式下正常工作。根据文档,即使在它工作时也需要实验编译器选项,所以最好在使用微软编译器时打开C++ 20的支持。< /P>它与>STD:C++最新范围不是C++ 17的一部分。我可能误解了你的答案。显然,std::ranges::which
随C++20而来,而不是C++17,但我在示例中使用的是Range-v3库,而不是C++20 ranges库,这在C++17中确实有效。尽管如此,您建议使用/std:c++最新版本
解决了这个问题。你能再解释一下吗?你的意思是#include
正在按原样进行处理#include
??为什么其他两个编译器可以使用-std=c++17
?@Enlico:也许Ranges v3中包含的概念/概念。hpp
头在这些编译器上没有损坏?也许这些编译器在C++17模式下启用了太多功能?