Clang has template aliases since 3.0.
Merge branch 'master' into compatibility
Less ignorant backport to GCC 4.4 and GCC 4.5.
Updated the tests for updated GCC 4.4/4.5 backport.

The code is a mess.
MSVC 2013 compatibility.