我的代码超载operator+
了,
template < class T1, class T2 >
inline std::pair < T1, T2 > operator+ ( const std::pair < T1, T2 > & a, const std::pair < T1, T2 > & b )
{
return std::make_pair < T1, T2 > ( a.first + b.first, a.second + b.second );
}
但是,以下失败
vector < pair < int, int > > v ( n );
accumulate ( v.begin( ), v.end( ), make_pair ( 0, 0 ) );
编译器抱怨说
... stl_numeric.h:128:2: error: no match for 'operator+' in ...
并强制使用如下的显式形式:
accumulate ( v.begin( ), v.end( ), make_pair ( 0, 0 ), operator+< int, int> );
我的问题:为什么我需要operator+
明确提供?
特别是为什么下面的行在accumulate
失败时就像一个魅力?
make_pair ( 2, 3 ) + make_pair ( 5, 7)