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*>::value是false?true当我面向C++ 11时,我的设置就是Clang.
Pio*_*cki 25
这是因为在你的情况下X*成为右值.您无法分配到右值.改为左值而不是:
std::is_assignable<X*&, Y*>::value
// ~^~
Run Code Online (Sandbox Code Playgroud)
Bar*_*rry 25
如果表达
std::declval<T>() = std::declval<U>()在未评估的上下文中是良好的形式
但你不能分配给右值(这是什么declval<X*>()会)在所有.您需要在作业的左侧使用左值:
std::is_assignable<X*&, Y*>::value
Run Code Online (Sandbox Code Playgroud)
那是真的.如果Clang返回true,那肯定是一个Clang bug.