operator()签名后的'-> decltype'语法是什么?
template<>
struct less<void>
{ // transparent functor for operator<
typedef int is_transparent;
template<class _Ty1,
class _Ty2>
constexpr auto operator()(_Ty1&& _Left, _Ty2&& _Right) const
-> decltype(static_cast<_Ty1&&>(_Left)
< static_cast<_Ty2&&>(_Right))
{ // transparently apply operator< to operands
return (static_cast<_Ty1&&>(_Left)
< static_cast<_Ty2&&>(_Right));
}
};
这是C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ VC \ Tools \ MSVC \ 14.15.26726 \ include \ xstddef行276中的代码。
为什么以下两行重复?
(static_cast<_Ty1&&>(_Left)
< static_cast<_Ty2&&>(_Right))
答案 0 :(得分:0)
->decltype(static_cast<_Ty1&&>(_Left)
返回static_cast<_Ty1&&>(_Left)
的类型,并将其声明为函数的返回类型。
E.G。
auto function(int x ) -> int
和int function(int x )
相同