Ошибка вывода типа шаблона с помощью std::span в C++C++

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

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

Подробнее здесь: https://stackoverflow.com/questions/791 ... dspan-in-c
Ответить

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

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

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

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

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