std::is_assignable<int, int>::value == false в соответствующей реализации (например, clang/libС++, gcc/libstdС++, но не VS2012).
Интуитивно это означает, что выражение, такое как int x = 3;, недействительно. Но в спецификации is_assignable указано, что обе стороны присваивания преобразуются в std::add_rvalue_reference<T>::type, поэтому std::is_assignable<int, int>::value должна оцениваться до false (потому что int + && → int&&, что является неприменимое значение r).
Почему дизайн std::is_assignable разработан таким образом, или я не понимаю что-то о том, что действительно означает is_assignable<int, int>::value?
Связанные дискуссиях: