看起来这应该是合法的:
decltype(declval<istream>().operator>>(declval<istream>(), declval<int>())) test;
但是当我尝试编译时,我得到:
错误 C2661:
std::basic_istream<char,std::char_traits<char>>::operator >>
: 没有重载函数需要 2 个参数
难道我做错了什么?为什么这不评估为istream
?
编辑:
已经指出,因为istream& istream::operator>>(int&)
是一个方法,所以第一个值是自动传递的。
但是:decltype(declval<istream>().operator>>(declval<int>())) test;
错误:
错误 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>> *)
: 无法将参数 1 从转换std::ios_base::iostate
为std::basic_istream<char,std::char_traits<char>> &(__cdecl *)(std::basic_istream<char,std::char_traits<char>> &)
和decltype(istream::operator >> (declval<istream>(), declval<int>())) test;
错误:
错误 C2661:
std::basic_istream<char,std::char_traits<char>>::operator >>
: 没有重载函数需要 2 个参数