为什么 std::is_assignable return false 与相关的指针类型有关?
Why does std::is_assignable return false with related pointer types?
给出两个很简单的类:
class X
{
};
class Y : public X
{
};
为什么使用 Clang 和 GCC targeting C++14,std::is_assignable<X*, Y*>::value
是 false
?当我以 C++11 为目标时,true
在我的设置中使用了 Clang。
这是因为在您的情况下 X*
变成了右值。您不能分配给右值。改为左值:
std::is_assignable<X*&, Y*>::value
// ~^~
If the expression std::declval<T>() = std::declval<U>()
is well-formed in unevaluated context
但是您根本无法将 分配给 右值(这就是 declval<X*>()
的值)。您需要在赋值的左侧有一个 lvalue:
std::is_assignable<X*&, Y*>::value
确实如此。如果 Clang 返回 true,那绝对是 Clang 错误。
给出两个很简单的类:
class X
{
};
class Y : public X
{
};
为什么使用 Clang 和 GCC targeting C++14,std::is_assignable<X*, Y*>::value
是 false
?当我以 C++11 为目标时,true
在我的设置中使用了 Clang。
这是因为在您的情况下 X*
变成了右值。您不能分配给右值。改为左值:
std::is_assignable<X*&, Y*>::value
// ~^~
If the expression
std::declval<T>() = std::declval<U>()
is well-formed in unevaluated context
但是您根本无法将 分配给 右值(这就是 declval<X*>()
的值)。您需要在赋值的左侧有一个 lvalue:
std::is_assignable<X*&, Y*>::value
确实如此。如果 Clang 返回 true,那绝对是 Clang 错误。