#include #include namespace xxx { namespace nested { struct aaa {}; } void begin(nested::aaa) {} } namespace nnn { void begin(xxx::nested::aaa) {} } namespace boost { template void the_end(X &) {} } namespace my { struct ccc : private boost::noncopyable {}; template void the_end(X &) {} } int main() { { using namespace nnn; xxx::nested::aaa a; begin(a); // ambiguous error in msvc-9.0 } { my::ccc c; the_end(c); // ambiguous error in msvc-9.0 } return boost::report_errors(); }