Zgodnie z this link, odrzucenie argumentu szablonu niedozwolone dla std::forward
i std::remove_reference
pomaga nam to osiągnąć. Ale w jaki sposób użycie remove_reference
zapobiega temu, aby potrącano szablon?W jaki sposób remove_reference wyłącza odliczanie argumentów szablonu?
template <class S>
S&& forward(typename std::remove_reference<S>::type& t) noexcept
{
return static_cast<S&&>(t);
}
"Mogłem mieć zupełnie niepowiązany typ' Foo', dla którego specjalizuję 'remove_reference', aby mieć typ 'int'." To technicznie UB :) –
@ T.C. Ok, usunę tę część. Nie chciałbym szerzyć złych pomysłów! – Barry
Polecam przeprofilowanie "ponieważ S jest specyfikatorem nazwy zagnieżdżonej" na coś podobnego "ponieważ S pojawia się w specyfikatorze nazwy zagnieżdżonej" –