is_convertible和之间有什么区别is_assignable?
为什么,
在vs2012
is_convertible<int, int&> is false
is_assignable<int, int&> is true
Run Code Online (Sandbox Code Playgroud)
在gcc4.7.2中
is_convertible<int, int&> is false
is_assignable<int, int&> is false
Run Code Online (Sandbox Code Playgroud) std::is_assignable<int, int>::value == false 在一致的实现中(例如clang/libc ++,gcc/libstdc ++,但不是VS2012).
直觉上,这意味着诸如int x = 3;无效的表达.但是is_assignable赋值的双方都被转换为的状态的规范std::add_rvalue_reference<T>::type,因此std::is_assignable<int, int>::value必须求值false(因为int+ &&- > int&&,这是一个无法分配的右值).
为什么std::is_assignable这样设计,或者我误解了什么是is_assignable<int, int>::value真正的意思?
相关讨论: