std::tuple
zawiera, między innymi, następujące konstruktory:Czy konieczne są wszystkie konstruktory std :: tuple?
explicit tuple(const Types&... args);
template< class... UTypes >
explicit tuple(UTypes&&... args);
Obie mają równoważne opisy w inicjalizacji że każdy z elementów z odpowiednią wartością w args
. Jedyną różnicą jest to, że w drugim parametry są przekazywane.
Z tego, co zrozumiałem o referencjach rvalue, nie rozumiem, dlaczego pierwsza wersja jest wymagana, ponieważ te same parametry mogły zostać przekazane do drugiej wersji. Odniesienia zostaną przekazane i nikt nie będzie mądrzejszy, szczególnie, że nie ma wzmianki o semantyce ruchu.
Czy ktoś może wyjaśnić, co sprawia, że oba konstruktory są potrzebne?
Druga wersja jest SFINAE-d z przeciążeniem ustawiony jeśli nie wszystkich 'UTypes' są niejawnie zamienny do odpowiednich' Types' – jrok