には、次のC++のプログラムを検討関数テンプレートdynamic_pointer_castでは動作しません理由:MSVC 2010でコンパイルする場合引数依存の照合が
#include <memory>
struct A {};
struct B : A {};
int main()
{
auto x = std::make_shared<A>();
if (auto p = dynamic_pointer_cast<B>(x));
}
を、私は次のエラーを取得:
error C2065: 'dynamic_pointer_cast' : undeclared identifier
エラーが解消されませんもしauto
がstd::shared_ptr<A>
に置き換えられれば。 std::dynamic_pointer_cast
で通話を完全に限定すると、プログラムは正常にコンパイルされます。
また、gcc 4.5.1はどちらかそれを好きではない:
error: 'dynamic_pointer_cast' was not declared in this scope
私はstd::dynamic_pointer_cast
はstd
名前空間のx
生活の種類以来、Koenig lookupによって選ばれていたであろうと思いました。私はここで何が欠けていますか?
** std :: dynamic_pointer_cast **がスローアップするのは何ですか? – DumbCoder
@DumbCoder:私が言ったように、プログラムは 'std :: dynamic_pointer_cast'を使うとコンパイルします。私は、なぜコンパイラがADLによって 'dynamic_pointer_cast'を選択しないのか不思議です。 –
申し訳ありませんが、その部分をスキミング、私の悪い!! – DumbCoder