#include <vector>
using namespace std;
template<typename T, typename = decltype(&T::size)>
void f1(T)
{}
template<typename T, typename = decltype(&T::size)>
void f2(T&)
{}
template<typename T, typename = decltype(&T::size)>
void f3(T&&)
{}
int main()
{
vector<int> coll;
f1(coll); // ok
f2(coll); // ok
f3(coll); // error : no matching function for call to 'f3'
}
main.cpp (21,6) Uwaga: szablon kandydat ignorowane: brak substytucji [Z
T
=>std::vector<int, std::allocator<int> > &
] Typ „std::vector<int, std::allocator<int> > &
” nie może być stosowany przed „::
”, ponieważ zawiera Brak użytkownikówDlaczego nie przekazuje pracy referencyjnej w tym przypadku?
void f3(T&&)
Moje kompilator jest dzyń 4.0.
Ku mojemu zaskoczeniu, f3(coll)
kończy się niepowodzeniem, podczas gdy f1(coll)
i f2(coll)
są w porządku.
Dlaczego odwołanie do przekazywania nie działa w takim przypadku?
Pokaż nam również uwagę na temat błędu. – user2079303
@ user2079303, zobacz moją aktualizację. – xmllmx
Co jest niejasne w przypadku komunikatu o błędzie? –