私はVisual Studio 2012を使用しています。これを試すと:
std::unordered_set<std::shared_ptr<A>> myset;
次のエラーが表示されます。
エラー C2338: C++ 標準は、この型のハッシュを提供していません。
標準およびこのエラー レポート ( https://connect.microsoft.com/VisualStudio/feedback/details/734888#tabs ) によると、これはコンパイルする必要があり、Microsoft は VC++11 でサポートを実装しています。では、なぜこれが機能しないのでしょうか。
編集:これを機能させるにはどうすればよいですか? リンクされたページで回避策を試しましたが、ハッシュ関数が既に定義されているというエラーが表示されます。案の定、VC ディレクトリの「メモリ」ファイルの 1803 行目には次のようなものがあります。
template<class _Ty>
struct hash<shared_ptr<_Ty> >
: public unary_function<shared_ptr<_Ty>, size_t>
{ // hash functor
typedef shared_ptr<_Ty> _Kty;
typedef _Ty *_Ptrtype;
size_t operator()(const _Kty& _Keyval) const
{ // hash _Keyval to size_t value by pseudorandomizing transform
return (hash<_Ptrtype>()(_Keyval.get()));
}
};
通常は私のせいなので、コンパイラのせいにするのは気が進まないのですが、今回は本当に彼らがめちゃくちゃになったようです...