在operator>>
接受一个int
是一个成员函数(您目前使用两种成员的语法和非成员函数),它通过引用带有其参数(以便它可以填充它- declval
给你的int&&
,你需要declval
得到的int&
):
using T = decltype(declval().operator>>(declval ()));
更好的方法是不直接调用操作符,因此您不必担心哪个operator<<
是成员,哪个不是:
using T = decltype(declval() >> declval ());