es so scheint, sollte legal sein:Warum kann ich decltype auf einem Extraction Operator
decltype(declval<istream>().operator>>(declval<istream>(), declval<int>())) test;
Aber wenn ich versuche ich zu kompilieren erhalten:
Fehler C2661:
std::basic_istream<char,std::char_traits<char>>::operator >>
: nein Überladene Funktion benötigt 2 Argumente
Mache ich etwas falsch? Warum bewertet dies nicht zu einem istream
?
EDIT:
Es has been pointed heraus, dass, weil istream& istream::operator>>(int&)
Verfahren ist, wobei der erste Wert automatisch übergeben wird.
jedoch: decltype(declval<istream>().operator>>(declval<int>())) test;
Fehler mit:
Fehler C2664:
std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(std::basic_streambuf<char,std::char_traits<char>> *)
:Fehler C2661: nicht Argument 1 von
std::ios_base::iostate
zustd::basic_istream<char,std::char_traits<char>> &(__cdecl *)(std::basic_istream<char,std::char_traits<char>> &)
Und
decltype(istream::operator >> (declval<istream>(), declval<int>())) test;
Fehler mit umwandeln kannstd::basic_istream<char,std::char_traits<char>>::operator >>
: keine überladene Funktion benötigt 2 Argumente
Ein Mitglied 'oparator <<' von 'istream 'wird' istream 'nicht als erster Parameter nehmen. – StoryTeller
@StoryTeller Sie sagen, dass implizit übergeben wird, oder? –
@ JonathanMee - wie immer bei Elementfunktionen. – StoryTeller