"Are you an enum?" "Are you polymorphic?" The answers to these type questions and more are already in your C++11 standard library:
by Yvonne Ma
From the article:
... As its name suggests, Type Traits exposes different characteristics of types, or simply the “type of type”. In many C++ programming practices, especially these in template metaprogramming, developers may find it difficult to build a template work for all types without knowing the characteristics of a type. That’s the key reason for the emergence of Type Trait...