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)
Mik*_*our 13
一个不同之处在于争论是相反的.
is_convertible<From,To>表示类型的表达式From可以转换为类型To.该标准在返回功能方面定义了该To含有线return create<From>();,其中create<From>()返回到参考From.所以is_convertible<int,int&>是错误的,因为你不能将rvalue 绑定int到非const 左值引用int&.
is_assignable<T,U>表示可以将类型的rvalue表达式U赋给类型的表达式T; 也就是说,这t = u;是一个良好的形式.要赋值的表达式被指定为函数调用,如果是左值引用则返回左值引用,否则返回右值引用.这意味着只有在非const 左值引用类型时才能为true ; 因此是假的.Tis_assignable<T,U>T<int,int&>
我猜想VS2012要么允许赋值给xvalues,要么使用非标准检查is_assignable,给出我认为不正确的结果.
注意,一般来说,敞篷车并不意味着可分配,因为可能没有可访问的赋值运算符; 并且assignable并不意味着可转换,因为可能有赋值运算符但没有可访问的转换构造函数或运算符.