为什么在向量上调用 std::rotate 会导致“没有匹配的函数调用‘__begin’”错误?

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

我有以下函数可以旋转 char 向量:

void rotate()
{
    std::ranges::rotate(_right, _right.begin() + 1);
}

_right 定义为:

 std::vector<char> _right;

尝试用 clang 15 编译它,它抱怨(https://godbolt.org/z/7ovTfxe31):

 no matching function for call to '__begin'

原因似乎如下:

in instantiation of template type alias 'iterator_t' requested here
  requires contiguous_iterator<iterator_t<_Derived>>

但我假设向量是一个连续的容器。代码使用 GCC 编译并运行。

这是我的问题:

  1. 根据cppreference,上述调用应该是合法的调用,还是我错过了什么?
  2. 如果是合法的调用,那么有没有办法让 clang 像 GCC 一样接受调用?
c++ c++20 clang++
1个回答
0
投票

由于 clang 15 处理约束的方式,旧版本的 clang 在编译 libstdc++ 算法时存在问题。

请参阅 LLVM 问题 44178:[概念] 延迟替换为未实现的类模板成员的要求。这是一个已知的错误,已在 clang 16 中解决。

© www.soinside.com 2019 - 2024. All rights reserved.