Introduction - If you have any usage issues, please Google them yourself
BEWARE: If the compiler do not support partial template specialization or nested template classes the default behavior of the __ is to consider the condition as false and so return the second template type.