Sorry about my writing is not very good. We may decide: 1) Which is nicer? 2) Which is easier? 3) Which is more readable and understandable? 4) Which is more automatic? etc.
We can do all these stuff by using "boost::enable_if", "boost::mpl::and_", "boost::mpl::or_" in c++, but it is really hard to write, read and understand.
The question is: "Can we do it better?" You can choose one of below:
