考慮下面的C++程序中工作:爲什麼參數依賴查找不符合函數模板dynamic_pointer_cast
#include <memory>
struct A {};
struct B : A {};
int main()
{
auto x = std::make_shared<A>();
if (auto p = dynamic_pointer_cast<B>(x));
}
當2010 MSVC編譯,我得到以下錯誤:
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
會被Koenig lookup採摘,因爲x
生活在std
命名空間中的類型。我在這裏錯過了什麼?
是什麼讓它** std :: dynamic_pointer_cast **拋出? – DumbCoder 2012-03-23 12:06:02
@DumbCoder:就像我說的,程序在我使用'std :: dynamic_pointer_cast'時編譯。我只是好奇編譯器爲什麼不選擇ADL的'dynamic_pointer_cast'。 – 2012-03-23 12:06:47
不好意思剔除那部分,我的壞! – DumbCoder 2012-03-23 12:08:28