Rani Sharoni wrote: > > Here is a weird (but working !) version: > > template <typename B, typename D> > struct helper > { > template <typename T> > static yes check(int B::*, T); > static no check(int D::*, int); > }; > > // TODO: add cv-qualifiers to B and D > > template<typename B, typename D> > struct is_base_and_derived > { > struct Host > { > operator int D::*() const; > operator int B::*(); > }; > > enum { result = > sizeof(helper<B,D>::check(Host(), 0)) == sizeof(yes) > }; > }; > > BTW: the relevant section in the C++ standard is 13.3.3.2/4/3 (especially > the foot note).
Cool. I modified it a bit, my version works for the GCC 3.2.1 and the Intel 7 - with no namespace polution from 'helper': template< typename B, typename D > struct is_base_and_derived { private: struct detail { template< typename T > static yes check( int B::*, T ); static no check( int D::*, int ); struct host { operator int D::*() const; operator int B::*(); }; }; public: enum { value = sizeof detail::check( detail::host(), 0 ) == sizeof( yes ) }; }; Regards, Daniel -- Daniel Frey aixigo AG - financial training, research and technology Schloß-Rahe-Straße 15, 52072 Aachen, Germany fon: +49 (0)241 936737-42, fax: +49 (0)241 936737-99 eMail: [EMAIL PROTECTED], web: http://www.aixigo.de _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost