为什么依赖于参数的查找不考虑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