result_of::size::value and result_of::size::type::value should be same type, rels to: #7304.
result_of::at<Seq, N>::type is't defined when sizeof of sequence is less than N, close #6507, #7651

Original proposals suggest making as a hard error (by MPL asssert /
static assert), however this change just doesn't define due to
SFINAE-friendly.
Fix wrong include
Mitigate too noisy name-hiding warnings (C4453) on VS2015 Preview.