Boost logo

Boost :

From: E. Gladyshev (egladysh_at_[hidden])
Date: 2003-11-05 23:51:31

MSVC's strange ABI effect seems to let you
identify whether a *polymorphic* type has a virtual d'tor.

I was quite suprised to discover that
when the polymorphic base type doesn' have virtual d'tor,
then the following is true:
sizeof(derived<base>) != sizeof(derived_vdtor<base>).

If the base type has virtual d'tor, then
sizeof(derived<base_vdtor>) == sizeof(derived_vdtor<base_vdtor>).

See the code below. The trick is in using virtual base type.

I could not find any info about it.
Does someone know what is going on?
I checked MSVC v6 and v7.1 ...
they both give consistent results.

#include <iostream>

struct base_vdtor
        char c[10];
        virtual ~base_vdtor();
        virtual int f();

struct base
        char c[10];
        virtual int f();

template< typename T >
struct derived_vdtor : virtual T
        virtual ~derived_vdtor() {}

template< typename T >
struct derived : virtual T
        ~derived() {}

int main()
        std::cout << "virtual dtor\n" <<
                sizeof(derived<base_vdtor>) << " " << sizeof(derived_vdtor<base_vdtor>) << "\n";
        std::cout << "plain dtor\n" <<
                sizeof(derived<base>) << " " << sizeof(derived_vdtor<base>) << "\n";
        return 0;


Do you Yahoo!?
Protect your identity with Yahoo! Mail AddressGuard

Boost list run by bdawes at, gregod at, cpdaniel at, john at