Clang++16 在 FreeBSD 13.2 上无法从 `std::ranges` 中找到 sort() 函数

问题描述 投票:0回答:2

我正在尝试编译一个使用

std::ranges::sort()
和 clang++16 的程序。根据网站 https://en.cppreference.com/w/cpp/compiler_support/20,One Ranges 提案已在 Clangs 的 libc++ 版本 13(部分)、15(需要
-fexperimental-library
标志)中实现,并且16(不带旗帜)。

我使用

sudo pkg install llvm16
安装了 clang++16,但是在尝试编译应用程序时,出现错误“没有调用‘排序’的匹配函数”。

最小可重现示例:

#include <algorithm>
#include <ranges>
#include <array>

int main()
{
    std::array s {5, 7, 4, 2, 8, 6, 1, 9, 0, 3};

    std::ranges::sort(s);
}

尝试使用

clang++16 -std=c++20 -stdlib=libc++ test.cpp -o test
进行编译会导致此错误:

test.cpp:9:15: error: no type named 'sort' in namespace 'std::ranges'
        std::ranges::sort(s);
        ~~~~~~~~~~~~~^
1 error generated.

我做错了什么?

c++ c++20 freebsd clang++ libc++
2个回答
1
投票

FreeBSD 13.2 镜像中提供的

libc++
版本太旧。使用
-fexperimental-library
标志没有帮助。

我能够使用 FreeBSD 14.0 映像成功编译带有

-fexperimental-library
标志的示例代码。


0
投票

如果需要支持 FreeBSD 13.2,并且也可以选择使用 Boost,您可以尝试

#include <boost/range/algorithm.hpp>
并使用
boost::range::sort()
代替
std::ranges::sort()
:

#include <array>

#include <boost/range/algorithm.hpp>

int main()
{
    std::array s {5, 7, 4, 2, 8, 6, 1, 9, 0, 3};

    boost::range::sort(s);
    // ...
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.