template<bool B, class T = void>
struct enable_if {}; #1
template<class T>
struct enable_if<true, T> { typedef T type; }; #2
It only declares the default value of T is void in the #1. For #2, there is not default value of T. However, why T will be void if the bool B is true?