сказать, что я эту структуру:идеальный экспедиторская дилемма
template <typename ...A>
struct A
{
void f(A&& ...args)
{
fwd(std::forward<A>(args)...);
}
template <typename ...B>
void g(B&& ...args)
{
fwd(std::forward<B>(args)...);
}
};
воли f
и g
как вперед отлично, если A... == B...
? ИМО, они должны, но я просто прошу быть уверенным.
EDIT: Причина этого вопроса - общая лекция о том, как идеальные функции пересылки всегда должны быть функциями шаблона. Очевидно, это не так для f
.
Зависит от того, что вы имеете в виду * будут ли они как вперед, так прекрасно *. 'f()' принимает только ссылки rvalue в качестве аргументов и передает их вместе как rvalues в 'fwd()'. 'g()' принимает как значения lvalue, так и rvalue, и будет пересылать их вместе, сохраняя соответствующие категории значений. – Praetorian
@Praetorian: Почему только rvalue-ссылки? Мы не знаем, какой экземпляр «A» использовался. Например, 'A' 'A ' 'Aint const &>' 'A ' ... –
Deduplicator
Что вы говорите, происходит из-за правил дедукции, что, если вы создаете экземпляр явно? То есть вы можете создать экземпляр 'A' с параметрами (-ами) ссылочного типа. – user1095108