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
?
Связанные дискуссиях: