I'm using Visual Studio 2015.
Any idea why this code compiles:
#include <memory>
class Foo;
class Bar;
typedef std::pair<Foo*,std::weak_ptr<Bar>> Object;
typedef std::vector<Object> ObjectVect;
bool operator==( std::weak_ptr<Bar> left,
std::weak_ptr<Bar> right )
{
return left.lock() == right.lock();
}
int main( int argc, char* argv[] )
{
ObjectVect vect;
Object obj;
auto foundIter = std::find( vect.begin(), vect.end(), obj );
return 0;
}
while this one gives me error:
#include <memory>
class Foo;
namespace MyNamespace
{
class Bar;
}
typedef std::pair<Foo*,std::weak_ptr<MyNamespace::Bar>> Object;
typedef std::vector<Object> ObjectVect;
bool operator==( std::weak_ptr<MyNamespace::Bar> left,
std::weak_ptr<MyNamespace::Bar> right )
{
return left.lock() == right.lock();
}
int main( int argc, char* argv[] )
{
ObjectVect vect;
Object obj;
auto foundIter = std::find( vect.begin(), vect.end(), obj );
return 0;
}
Error C2678 binary '==': no operator found which takes a left-hand operand of type 'const std::weak_ptr' (or there is no acceptable conversion) test_cppunit_interpreter_base_multi_output c:\program files (x86)\microsoft visual studio 14.0\vc\include\utility 216
Looks like it failes to find the comparator when Bar
is located in a namespace...
Am I doing something wrong? Or could this be a compiler bug?
std::weak_ptr<Bar>
, which is not a type contained innamespace MyNamespace
. – SheepishBar
is. – Sheepish