template<typenameT1,typenameT2>inlinebooloperator==(constref<T1>&a,constref<T2>&b){returna.p()==b.p();}///< Returns true if the internal pointers of refs \a a and \a b are equal.
template<typenameT1,typenameT2>inlinebooloperator!=(constref<T1>&a,constref<T2>&b){returna.p()!=b.p();}///< Returns true if the internal pointers of refs \a a and \a b are different.
template<typenameT1,typenameT2>inlinebooloperator==(constref<T1>&a,T2*b){returna.p()==b;}///< Returns true if the internal pointer of ref \a a is equal to the naked pointer \a b.
template<typenameT1,typenameT2>inlinebooloperator!=(constref<T1>&a,T2*b){returna.p()!=b;}///< Returns true if the internal pointer of ref \a a is different from the naked pointer \a b.
template<typenameT1,typenameT2>inlinebooloperator==(T1*a,constref<T2>&b){returna==b.p();}///< Returns true if the naked pointer \a a is equal to the internal pointer of ref \a b.
template<typenameT1,typenameT2>inlinebooloperator!=(T1*a,constref<T2>&b){returna!=b.p();}///< Returns true if the naked pointer \a a is different from the internal pointer of ref \a b.
/// Swap contents of \a a and \a b. Matches signature of std::swap().
/// \todo Need to investigate which STL algorithms actually utilize the swap() function.
template<typenameT1,typenameT2>inlinebooloperator==(constcref<T1>&a,constcref<T2>&b){returna.p()==b.p();}///< Returns true if the internal pointers of refs \a a and \a b are equal.
template<typenameT1,typenameT2>inlinebooloperator!=(constcref<T1>&a,constcref<T2>&b){returna.p()!=b.p();}///< Returns true if the internal pointers of refs \a a and \a b are different.
template<typenameT1,typenameT2>inlinebooloperator==(constcref<T1>&a,T2*b){returna.p()==b;}///< Returns true if the internal pointer of ref \a a is equal to the naked pointer \a b.
template<typenameT1,typenameT2>inlinebooloperator!=(constcref<T1>&a,T2*b){returna.p()!=b;}///< Returns true if the internal pointer of ref \a a is different from the naked pointer \a b.
template<typenameT1,typenameT2>inlinebooloperator==(T1*a,constcref<T2>&b){returna==b.p();}///< Returns true if the naked pointer \a a is equal to the internal pointer of ref \a b.
template<typenameT1,typenameT2>inlinebooloperator!=(T1*a,constcref<T2>&b){returna!=b.p();}///< Returns true if the naked pointer \a a is different from the internal pointer of ref \a b.