
LS, I have noticed that using Boost.Operators has a side-effect which I can't explain. I am using std::make_shared as a default, however, some of the boost libraries I use pull in boost::make_shared as well. When using some class T2 derived from one of the boost.operators classes, this causes MSVC2010 to not compile when invoking make_shared<T2> as the compiler can no longer resolve between the two overloaded versions of make_shared for some reason. I am hoping that someone out can explain what is happening here. A minimal example is included here: #include <memory> #include <boost\operators.hpp> #include <boost\make_shared.hpp> struct T1 {}; struct T2 : boost::equality_comparable<T2> {}; int main( int argc, const char* argv[] ) { T1 Object1; T2 Object2; using std::make_shared; std::shared_ptr<T1> Ptr1 = make_shared<T1>(Object1); // OK std::shared_ptr<T2> Ptr2 = make_shared<T2>(Object2); // error C2668: 'boost::make_shared' : ambiguous call to overloaded function return 1; } Thanks in advance! Pieter