Comment for TypeTag
Add branch function
Typo
Rename branch -> apply
Add requirement about contained types
Fix compilation error in GCC
Fix GCC compilation error

GCC 4.8.1 doesn't like non-static member access in noexcept.
Add Constructor and remove copyConstructTo and moveConstructTo