Hi, I'm getting different behaviours using is_base_of on different compilers (tested with gcc, icc, xlc). #include <boost/type_traits.hpp> #include <boost/static_assert.hpp> struct A { }; struct B : public A { }; int main() { // Compile fine under all compilers BOOST_STATIC_ASSERT( (boost::is_base_of<A,A>::value) ); // all fail in xlC 10.1, work fine in gcc 4.3-4.4 and icc 11 BOOST_STATIC_ASSERT( (boost::is_base_of<A,const A>::value) ); BOOST_STATIC_ASSERT( (boost::is_base_of<A,volatile A>::value) ); BOOST_STATIC_ASSERT( (boost::is_base_of<A,const volatile A>::value) ); // Compile fine under all compilers BOOST_STATIC_ASSERT( (boost::is_base_of<A,B>::value) ); BOOST_STATIC_ASSERT( (boost::is_base_of<A,const B>::value) ); BOOST_STATIC_ASSERT( (boost::is_base_of<A,volatile B>::value) ); BOOST_STATIC_ASSERT( (boost::is_base_of<A,const volatile B>::value) ); return 0; } Thanks