Size: a a a

2020 July 15

Р

Роман in pro.cxx
Ну так че туда конст давать
источник

D

Danya in pro.cxx
Што?
источник

A

Alexander in pro.cxx
Danya
В std::forward не надо ссылки передавать
Почему?
источник

Р

Роман in pro.cxx
Ну должно вроде как быть
forward<T&&>
источник

Р

Роман in pro.cxx
Не
источник

D

Danya in pro.cxx
Роман
Ну должно вроде как быть
forward<T&&>
Вообще нет
источник

CD

Constantine Drozdov in pro.cxx
Alexander
Ребят кто может объяснить мне почему std::forward выкидывает ссылку из типа если аргумент const?

MyClass myClass; // простая структура из пары переменных

MyClass& class_ref = myClass;
std::forward<MyClass&>(class_ref); // всё ок

const MyClass& class_const_ref = myClass;
std::forward<const MyClass&>(class_const_ref); // no instance of overloaded function "std::forward" matches the argument list: (const MyClass)
как вы это выяснили?
источник

D

Danya in pro.cxx
Alexander
Почему?
Ну вообще std::forward используется только в forwarding reference и я не знаю юзкейсов иных
Пример:

template <typename T>
void foo(T&& obj) {
 bar(std::forward<T>(obj));
}
источник

CD

Constantine Drozdov in pro.cxx
источник

Р

Роман in pro.cxx
Danya
Ну вообще std::forward используется только в forwarding reference и я не знаю юзкейсов иных
Пример:

template <typename T>
void foo(T&& obj) {
 bar(std::forward<T>(obj));
}
Да, ты прав)
источник

CD

Constantine Drozdov in pro.cxx
Danya
Ну вообще std::forward используется только в forwarding reference и я не знаю юзкейсов иных
Пример:

template <typename T>
void foo(T&& obj) {
 bar(std::forward<T>(obj));
}
зафорвардь аргументы в
[] (auto&&... args) {}
источник

D

Danya in pro.cxx
Constantine Drozdov
зафорвардь аргументы в
[] (auto&&... args) {}
Ой вот не надо тут вашими авто разбрасываться...
источник

CD

Constantine Drozdov in pro.cxx
Danya
Ой вот не надо тут вашими авто разбрасываться...
так ты зафорвардь, а потом говори, как std::forward используется, там будет стоять std::forward<decltype(args)>(args)...
источник

CD

Constantine Drozdov in pro.cxx
и std::forward будет с rvalue reference инстанцирован, и всё будет зашибись
источник

AT

Andrew Titov in pro.cxx
Constantine Drozdov
как вы это выяснили?
источник

D

Danya in pro.cxx
Constantine Drozdov
так ты зафорвардь, а потом говори, как std::forward используется, там будет стоять std::forward<decltype(args)>(args)...
[]<typename T>(T&& obj){}
источник

Р

Роман in pro.cxx
Шо
источник

CD

Constantine Drozdov in pro.cxx
Danya
[]<typename T>(T&& obj){}
зачем
источник

D

Danya in pro.cxx
Потому что могу
источник

CD

Constantine Drozdov in pro.cxx
Danya
Потому что могу
а теперь полную твою версию
#define LIFT(foo) \
 [](auto&&... x) \
   noexcept(noexcept(foo(std::forward<decltype(x)>(x)...))) \
  -> decltype(foo(std::forward<decltype(x)>(x)...)) \
 { return foo(std::forward<decltype(x)>(x)...); }
источник