id,summary,reporter,owner,description,type,status,milestone,component,version,severity,resolution,keywords,cc 3948,Conflict between concept_check and shared_ptr,m.champlon@…,jsiek,"Hello, The following code compiled with MSVC 2005 or 2008 : {{{ #include namespace boost { template< typename T > class some_type {}; template< typename T1, typename T2 > bool operator<( const some_type< T1 >&, const some_type< T2 >& ); } class c {}; BOOST_CONCEPT_ASSERT((boost::LessThanComparable< c >)); }}} Produces the following error : {{{ 1>C:\Users\Mat\Desktop\dev\include\boost/concept_check.hpp(242) : error C2784: 'bool boost::operator <(const boost::some_type &,const boost::some_type &)' : could not deduce template argument for 'const boost::some_type &' from 'c' 1> ..\..\src\tests\turtle_test\concept_check_test.cpp(19) : see declaration of 'boost::operator <' 1> C:\Users\Mat\Desktop\dev\include\boost/concept_check.hpp(241) : while compiling class template member function 'boost::LessThanComparable::~LessThanComparable(void)' ... }}} Changing the namespace from boost to anything else (for instance nm) produces the correct error output e.g. : {{{ 1>C:\Users\Mat\Desktop\dev\include\boost/concept_check.hpp(242) : error C2676: binary '<' : 'c' does not define this operator or a conversion to a type acceptable to the predefined operator 1> C:\Users\Mat\Desktop\dev\include\boost/concept_check.hpp(241) : while compiling class template member function 'boost::LessThanComparable::~LessThanComparable(void)' ... }}} This use case is actually quite common because for instance in boost::shared_ptr there is such a construct, in the boost namespace of course. Therefore the following code exhibits the same problem : {{{ #include #include class c {}; BOOST_CONCEPT_ASSERT((boost::LessThanComparable< c >)); }}} Maybe enclosing the concept check code into another level of namespace would prove enough to protect from the lookup ? Thank you !",Bugs,new,Boost 1.43.0,concept_check,Boost 1.42.0,Problem,,,