爲什麼依賴於參數的查找不考慮Foo::dynamicCast
,它不應該考慮名稱空間Foo,因爲Base類位於此名稱空間中嗎?不考慮參數相關查找
#include <memory>
using namespace std;
namespace Foo
{
template<typename P, typename T> P*
dynamicCast(T* t)
{
return dynamic_cast<P*>(t);
}
class Base
{
public:
virtual ~Base() = default;
};
}
namespace Test
{
class Derived : public Foo::Base
{
};
}
shared_ptr<Foo::Base> b = make_shared<Test::Derived>();
auto d = dynamicCast<Test::Derived>(b.get());
測試了一下。這可以工作:http://ideone.com/tX3JcU – bolov
使用顯式模板參數時不會觸發ADL。 – 0x499602D2
@ 0x499602D2:稍微複雜一點:除非有一個可見的同名函數模板:[Demo](http://coliru.stacked-crooked.com/a/15b614250f6ad61c)。 – Jarod42