#ifdef BOOST_ADL_WORKAROUND_ namespace boost_noncopyable // protection from unintended ADL { class noncopyable { protected: noncopyable() {} ~noncopyable() {} private: // emphasize the following members are private noncopyable( const noncopyable& ); const noncopyable& operator=( const noncopyable& ); }; } namespace boost { typedef boost_noncopyable::noncopyable noncopyable; } #else #include "boost/noncopyable.hpp" #endif namespace metal { class gold : private boost::noncopyable { }; } namespace boost { void find_metal(const metal::gold&) { } } int main() { metal::gold coin; find_metal(coin); return 0; }