This seems like a compiler error. This is about overload resolution and partial ordering of template functions. Since both template functions can correspond to an argument list (ReadPackager*, bool), a partial ordering of template functions should be used to select a more specialized template function.
, , , , , .
, Package(), , , (ReadPackager *, const int *) . , -, , .
, , , - . , .
-, P1 P2 .
1:
template<typename Packager, typename T>
bool Package( Packager* ppkgr, T* pt );
P2:
template<typename Packager>
bool Package( Packager* ppkgr, typename AddPkgrConst<Packager,bool>::type* pb);
, (T1) , , (T2). , (T1) , (T2).
P2- > P1
U Packager P2.P1. Packager U T AddPkgrConst<Packager,U>::type.
, P1 , P2.
P1- > P2:
U1 U2 Packager T P1, (U1 *, U2 *).P2. Packager U1.- , , , .
- ,
AddPkgrConst<U1,bool>::type, bool. U2.
, 4. , , , 4 , P2 , P1, , . , P1 , P2 , . , , .
, 1 14.8.2.5,
, , ( P), ( A), ( , - ), P ( A), .
AddPkgrConst<U1,bool>::type= bool. A, U2. , -, , .