170 похожих чатов

Можете пояснить плз,почему данный код не компулируется? template <typename T> void

invoke(std::function<void(T)> f, T val)
{
f(val);
}
int main()
{
auto printer = [](int x){ std::cout << x; };
::invoke(printer, 42);
}

10 ответов

5 просмотров

лень разбирать детали, но достаточно подавить попытку дедукции по T из std::function https://godbolt.org/z/7Gd6foMv4

В любом случае, это плохой стиль кодирования. До концептов надо писать template <typename Callable, typename Val> void invoke(Callable const& callable, Val&& val) { callable(std::forward<Val>(val)); } с концептами - поставить соответствующее ограничение на параметр класс std::function это класс типа TypeErasure, он не должен встречаться в сигнатурах шаблонов функций

Denial-... Автор вопроса
Denial ...
Что значит дедукция из function?

Как я понимаю, была попытка вывести тип T из std::function<void(T)> и она провалилась

компилятор пытается понять какой тип T ты хочешь подставить, но тут нетривиально он сидит в function, ему нужно детектить ещё и тип function, для неё нет deduction guide(не написан), он ломается и говорит да пшёл ты знаешь куда

Denial ...
Что значит дедукция из function?

оригинальный пример: std::function printer = [](int x){ std::cout << x; }; //OK std::function printer = [](int const& x){ std::cout << x; }; //ошибка: не понимаю, printer<int> или printer<int const&>

Constantine Drozdov
ты фигню пишешь, там есть гайд

возможно, короче формулируется это примерно так, что если для вывода типа нужен вывод типа, то так нельзя

Kelbon
возможно, короче формулируется это примерно так, ч...

возможно, deduction guide вообще не применяется при инстанцировании шаблона функции?)

Похожие вопросы

Обсуждают сегодня

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
83
читать файл максимально быстро? странный вопрос))
zamtmn
53
How to create an OS in C? what to study?
Linus
18
Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
5
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
Вопрос вроде правильно, но что надо сделать, чтоб текст был виден нормально ? ghci> TE.decodeUtf8 $ TE.encodeUtf8 "test - проба" "test - \1087\1088\1086\1073\1072"
Fedor
7
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
@HemulGM Параметры у AddStream поменялись? Несостыковка какая-то
Катерина Свиридова
12
Карта сайта