0

コードを VS2008 から VS2013 に移植しようとしていますが、std::bind でエラーが発生します。エラーには、エラー C2668: 'bind' : ambiguous call to overloaded function が表示されます。ここにいくつかのコードがあります:

// Relevant prototypes:
class CLineaPlanta:public SomeBase { /*...*/ };
int SomeBase::TipoLinea()const;
void SomeBase::TipoLinea(int val);

// function paramater: const std::shared_ptr<CLineaPlanta>& lineasBuscar
// function parameter: int tipoLinea;

std::shared_ptr<CLineaPlanta> lineas;
std::remove_copy_if(lineasBuscar.begin(), lineasBuscar.end(),
std::back_inserter(lineas), 
        bind(std::not_equal_to<int>(), bind(&CLineaPlanta::TipoLinea, _1), tipoLinea));

このコードは Visual Studio 2008 では機能しましたが、Visual Studio 2013 では前述のエラーが発生します。

明らかに、コンパイラは、どのバージョンの TipoLinea() を呼び出そうとしているかを判断するのに苦労しています。getter バージョンの名前を getTipoLinea に変更すると、エラーはなくなります。

関連する場合に備えて、 SomeBase は抽象的ではなく、 CObject (理由はよくわかりません) およびコードのこの部分に関連しないインターフェイスから派生します。

VS2008がこれに問題がない理由と、それを防ぐ方法を誰かが説明できますか(もちろん、関数の名前を変更する以外に)?

4

1 に答える 1