代码之家  ›  专栏  ›  技术社区  ›  Hariom Singh

错误:“to”不是“std::ranges”的成员

  •  0
  • Hariom Singh  · 技术社区  · 3 年前

    面临的问题 标准::范围::到 我正在执行以下示例 https://en.cppreference.com/w/cpp/ranges/to

    #include <algorithm>
    #include <concepts>
    #include <iostream>
    #include <ranges>
    #include <vector>
     
    int main()
    {
        auto vec = std::views::iota(1, 5)
                 | std::views::transform([](auto const v){ return v * 2; })
                 | std::ranges::to<std::vector>();
     
        static_assert(std::same_as<decltype(vec), std::vector<int>>);
     
        std::ranges::for_each(vec, [](auto const v){ std::cout << v << ' '; });
    }
    

    但是出现错误

    main.cpp: In function 'int main()':
    main.cpp:11:29: error: 'to' is not a member of 'std::ranges'
       11 |              | std::ranges::to<std::vector>();
          |                             ^~
    main.cpp:11:43: error: missing template arguments before '>' token
       11 |              | std::ranges::to<std::vector>();
          |                                           ^
    main.cpp:11:45: error: expected primary-expression before ')' token
       11 |              | std::ranges::to<std::vector>();
          |                                             ^
    main.cpp:13:24: error: template argument 1 is invalid
       13 |     static_assert(std::same_as<decltype(vec), std::vector<int>>);
    

    https://coliru.stacked-crooked.com/view?id=8fdd3554af82ef24

    我正在使用编译器C++23

    1 回复  |  直到 3 年前
        1
  •  5
  •   NathanOliver    3 年前

    这是因为 std::ranges::to 目前仅由MSVC 19.34支持

    您可以在此处查看编译器对语言和库功能的支持状态: https://en.cppreference.com/w/cpp/compiler_support

    例如,此功能在C++23库部分中列为

    C++23功能 纸张
    范围::to() 第1206r7页