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