Почему я не могу передать std::span в шаблон функции, принимающий std::span?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Почему я не могу передать std::span в шаблон функции, принимающий std::span?

Сообщение Anonymous »

Я работаю с шаблонами и выводом типов в C++ и столкнулся с ошибкой вывода типа при использовании std::span, но не при использовании необработанных указателей. Ниже приведена упрощенная версия моего кода:

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

#include 
#include 

template 
void f1(std::span param)
{}

template 
void f2(const T* param)
{}

int main()
{
std::vector v{1,2,3};
std::span s{v};
// Uncommenting this line causes a compilation error:
// cannot deduce a type for 'T' that would make 'const T' equal 'int'
// f1(s);
int x = 10;
int* px = &x;
const int* z = px;
f2(px); // Works fine
f2(z);  // Works fine
}
Когда я раскомментирую вызов f1(s), я получаю ошибку компиляции, сообщающую, что компилятор не может определить тип для T, который сделал бы const T< /code> равно int. Однако аналогичные шаблонные функции для указателей, такие как f2, компилируются без проблем при передаче как int*, так и const int*.
Почему эта ошибка возникает с std::span, но не с указателями?

Подробнее здесь: https://stackoverflow.com/questions/791 ... dspanconst
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • В чем разница между const int *, const int * const и int * const?
    Anonymous » » в форуме C++
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Ошибка: нет типа с именем «type» в «классе std::result_of<std::function<int(std::pair<int, int>&)>(std::pair<int, int>)>
    Anonymous » » в форуме C++
    0 Ответы
    171 Просмотры
    Последнее сообщение Anonymous
  • Можете ли вы преобразовать int*[N] в std::span?
    Anonymous » » в форуме C++
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Можете ли вы преобразовать int*[N] в std::span?
    Anonymous » » в форуме C++
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Как преобразовать список[int, int, int] в кортеж[int, int, int], а не в кортеж[int, ...]
    Anonymous » » в форуме Python
    0 Ответы
    290 Просмотры
    Последнее сообщение Anonymous

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