With template< typename T, typename = void > struct test as the generalization,
when the compiler sees test<short>, it knows that test<short,void> is to be instantiated.
If a specialization that matches test<short,void> is not seen, it instantiates the generalization.