У меня есть этот код: (живой, например: https://godbolt.org/z/js1qK9hd1)
struct big_class
{
std::string s1;
std::string s2;
std::string s3;
std::string s4;
std::string s5;
std::string s6;
std::string s7;
};
void func(const big_class &bc)
{
std::cout << bc.s1 << bc.s2 << bc.s3 << bc.s4 << bc.s5 << bc.s6 << bc.s7 << std::endl;
}
void fwd_func(big_class &&bc)
{
func(std::forward<big_class>(bc));
}
template<typename T>
void prefect_fwd_func(T &&bc)
{
func(std::forward<T>(bc));
}
int main()
{
big_class bc{"1", "2", "3", "4", "5", "6", "7"};
std::cout << "func" << std::endl;
func(bc);
std::cout << "fwd_func" << std::endl;
fwd_func(bc);
std::cout << "perfect_fwd_func" << std::endl;
prefect_fwd_func(bc);
}
Итак, здесь fwd_func не работает - но, на мой взгляд, он в основном такой же, как шаблон perfect_fwd_func - только это не шаблон.
Почему это не работает? - он говорит, что не может привязать lval к rval. Я думаю, это как-то связано с тем, что шаблон T &&
распадается на T
или что-то в этом роде, но все равно не могу разгадать его вместе ... В чем разница между ними?
Если бы я хотел просто передать тип big_class
- тогда я полагаю, что лучше всего просто передать его по константной ссылке ...
T&&
и _2 _... но я уверен, что там есть дубли, я просто еще не нашел их: p - person code_fodder   schedule 16.06.2021