this kind of functionality is required only when the generic or metaprogramming paradigms are used. otherwise, when you write a function in a statically typed language, you already know the type of every expression.
for a tutorial on discovering and using information about types, see this: http://www.boost.org/doc/html/boost_typetraits/background.html
these books would give more information on this:
1. Modern C++ Design: Generic Programming and Design Patterns Applied by Andrei Alexandrescu
2. C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond
by David Abrahams, Aleksey Gurtovoy