Невозможно построить `std::span` из `const std::vector&`C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Невозможно построить `std::span` из `const std::vector&`

Сообщение Anonymous »

Рассмотрим следующий код:

Код: Выделить всё

std::vector foo = some_generator_function();
std::span bar {foo};
/* Wrapper for C API that uses bar->data() and bar->size_bytes()
* if bar != nullptr, guaranteed not to change any data in bar.
* In some cases bar is constructed from a const C array.
*/
do_smth (&bar);
Этот код компилируется и работает нормально, поскольку std::span может быть создан из std::vector.
Теперь я пытаюсь обернуть это в отдельную функцию:

Код: Выделить всё

void do_wrap (const std::vector& foo) {
std::span bar (foo);
do_smth (&bar);
}
И возникает проблема:

ошибка: нет соответствующей функции для вызова 'std::span ::span(const std::vector&)'`

Точнее, const std::vector& не удовлетворяет ограничения.
Есть ли для этого какая-то причина? На данный момент я подозреваю, что квалификатор const.
Построение как bar (foo.data(), foo.size()) сообщает об аналогичной ошибке.
Компиляция с помощью g++ 14.2.0, MinGW64.

Подробнее здесь: https://stackoverflow.com/questions/793 ... stdvectort
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»