Example 5: Definition of the has_value_type used for detecting whether a class has a value_type member type.
typedef struct { char ar[1]; } one_t;
typedef struct { char ar[2]; } two_t;
template <typename T>
one_t has_value_type_function(...);
template <typename T>
two_t has_value_type_function(typename T::value_type const volatile *);
template <typename T>
struct has_value_type
{
enum { value = sizeof(has_value_type_function<T>(0)) == sizeof(two_t) };
};
template<>
struct has_value_type<void>
{
enum { value = 0 };
};