开始这不禁让我好奇这样的举动是否多次一举,但是注释protection from unintended ADL又告诉我们是为了防止无意识的ADL。经过思考,我得出的结论是:
我们把noncopyable移到了boost名字空间,并假设boost库里面有一个void foobar(const T&)的模版函数在我们编译单元的可视范围内,但是我们对此一无所知。而刚好我们又用foobar这个名字定义了两个函数,一个作用于类Base,另外一个作用于类Derived,那么在main函数里面的foobar(d)发生了什么?程式输出derived::foorbar : 43,嗯,正如我们期望的一样,调用了void foobar(const Derived&),boost库里面的foobar模版函数并没有造成困扰,因为我们有最匹配的版本,foobar模版并没有被实例化。