operator== and list ::remove()

Test.h

#ifndef TEST_H
#define TEST_H

#include <memory>

template <class Type>
bool operator==(const std::weak_ptr<Type>& wp1, const std::weak_ptr<Type>& wp2)
{
std::shared_ptr<Type> sp1;

if(!wp1.expired())
    sp1 = wp1.lock();

std::shared_ptr<Type> sp2;

if(!wp2.expired())
    sp2 = wp2.lock();

return sp1 == sp2;
}

#endif

Test.cpp

#include "Test.h"
#include <list>


int main()
{
typedef std::list< std::weak_ptr<int> > intList;

std::shared_ptr<int> sp(new int(5));
std::weak_ptr<int> wp(sp);

intList myList;
myList.push_back(wp);

myList.remove(wp); //Problem
}

Программа не будет компилироваться из-за myList.remove():

1>c :\program files (x86 )\микрософт визуальная студия 10.0\vc\include\list (1194 ):ошибка C2678 :двоичный '==' :не найден оператор, который принимает левый -операнд типа 'std ::tr1 ::weak _ptr< _Ty>' (или нет приемлемого преобразования )1>
с 1> [ 1> _Ty=int 1> ]

Но вы можете увидеть следующее, определенное в Test.h:

bool operator==(const std::weak_ptr<Type>& wp1, const std::weak_ptr<Type>& wp2)

В чем проблема?

6
задан user987280 15 April 2012 в 22:36
поделиться