How to determine if a C++ class has a vtable?
For completeness sake, here's the answer my buddy just sent me. From the look of it, it's probably similar to how TR1 does it (though I haven't looked at the code myself).
template<class T>
class HasVTable
{
public :
class Derived : public T
{
virtual void _force_the_vtable(){}
};
enum { Value = (sizeof(T) == sizeof(Derived)) };
};
#define OBJECT_HAS_VTABLE(type) HasVTable<type>::Value
The standard method is to use std::is_polymorphic
from C++11/C++03 TR1/Boost to determine if a class (and its bases) contain any virtual members.
#include <type_traits>
#define OBJECT_HAS_VTABLE(T) (std::is_polymorphic<T>::value)