Почему вызов std::rotate для вектора приводит к ошибке «нет соответствующего вызова функции для '__begin'»? ⇐ C++
-
Anonymous
Почему вызов std::rotate для вектора приводит к ошибке «нет соответствующего вызова функции для '__begin'»?
У меня есть следующая функция, которая выполняет поворот вектора char:
void Rotate() { std::ranges::rotate(_right, _right.begin() + 1); } _right определяется как:
std::vector _right; при попытке скомпилировать его с помощью clang 15 он жалуется на это (https://godbolt.org/z/7ovTfxe31):
нет соответствующей функции для вызова __begin Причина этого, по-видимому, следующая:
при создании экземпляра псевдонима типа шаблона 'iterator_t', запрошенного здесь требуется contigious_iterator но я предполагаю, что вектор — это непрерывный контейнер. Код компилируется и запускается с помощью GCC.
Вот мои вопросы:
[*]Согласно cppreference, вышеупомянутый вызов должен быть законным, или я что-то упускаю? [*]Если это законный вызов, есть ли способ заставить clang принять вызов, как GCC?
У меня есть следующая функция, которая выполняет поворот вектора char:
void Rotate() { std::ranges::rotate(_right, _right.begin() + 1); } _right определяется как:
std::vector _right; при попытке скомпилировать его с помощью clang 15 он жалуется на это (https://godbolt.org/z/7ovTfxe31):
нет соответствующей функции для вызова __begin Причина этого, по-видимому, следующая:
при создании экземпляра псевдонима типа шаблона 'iterator_t', запрошенного здесь требуется contigious_iterator но я предполагаю, что вектор — это непрерывный контейнер. Код компилируется и запускается с помощью GCC.
Вот мои вопросы:
[*]Согласно cppreference, вышеупомянутый вызов должен быть законным, или я что-то упускаю? [*]Если это законный вызов, есть ли способ заставить clang принять вызов, как GCC?
Мобильная версия