2

下面的代码在 GCC 8.3Clang 10.0.1上编译和运行得很好,而在 MicroSoft 闪亮的编译器上却惨遭失败。

#include <vector>
#include <range/v3/view/group_by.hpp>

int main(){
    std::vector<int> edits{1,1,3,2,2,4,4,4,4,1,1,3,3,2};
    auto xxx = ranges::subrange(edits.begin(), edits.end());
}

有没有我丢失的标志?

4

1 回答 1

2

您已指定/std:c++17并且ranges::subrange不存在于 C++ 17中。Ranges-v3 还需要 C++ 20,因为它使用概念。

改为编译/std:c++latest成功。

这些错误原来来自捆绑在 Ranges v3 中的概念仿真层,该层显然在最新的 Visual C++ 的 C++17 模式下无法正常工作。根据文档,即使它确实可以工作,它也需要实验性的编译器选项,因此最好在使用 Microsoft 的编译器时打开 C++ 20 支持。

于 2021-02-12T18:21:35.237 回答