为什么std :: is_assignable返回false与相关的指针类型?

zne*_*eak 24 c++ type-traits c++14

给出两个非常简单的类:

class X
{
};

class Y : public X
{
};
Run Code Online (Sandbox Code Playgroud)

为什么说,随着锵和GCC针对C++ 14,std::is_assignable<X*, Y*>::valuefalsetrue当我面向C++ 11时,我的设置就是Clang.

Pio*_*cki 25

这是因为在你的情况下X*成为右值.您无法分配到右值.改为左值而不是:

std::is_assignable<X*&, Y*>::value
//                  ~^~
Run Code Online (Sandbox Code Playgroud)


Bar*_*rry 25

std::is_assignable 检查:

如果表达std::declval<T>() = std::declval<U>()在未评估的上下文中是良好的形式

但你不能分配右值(这是什么declval<X*>()会)在所有.您需要在作业的左侧使用左值:

std::is_assignable<X*&, Y*>::value
Run Code Online (Sandbox Code Playgroud)

那是真的.如果Clang返回true,那肯定是一个Clang bug.