isPolymorphicType_selector exists to work around a compile error problem: More...
#include <classTraits.h>
Classes | |
struct | rebind |
isPolymorphicType_selector exists to work around a compile error problem:
If you use a type, it must be syntactically correct -- unless it is a template which does not always have to.
The error occurred when we tried to use the isPolymorphicType_impl<enumType>. Since there are an infinite number of enum types, we can't specially them all. The work around is to check for a class object before attempting to instantiating isPolymorphicType_impl<T>. In this way, if the data type isn't a class, we never instantiate the offending type.
To pull this off, a choice of isPolymorphicType_selector<T> is made. One specialization, for classes, has a nested sub-type template defines a sub-sub-type which invokes isPolymorphicType_impl<T>. The other specialization of isPolymorphicType_selector does not invoke isPolymorphicType_impl<T>, but just stops with a false indication.
The rebind<T> syntax is just a compilicated way of not compiling isPolymorphicType_impl<T> -- unless we absolutely need it.
Definition at line 753 of file classTraits.h.