給定兩個非常簡單的類:爲什麼std :: is_assignable與相關指針類型返回false?
class X
{
};
class Y : public X
{
};
爲什麼,隨着鏘和GCC targeting C++14,std::is_assignable<X*, Y*>::value
是false
?當我定位C++ 11時,我的設置是Clang true
。
給定兩個非常簡單的類:爲什麼std :: is_assignable與相關指針類型返回false?
class X
{
};
class Y : public X
{
};
爲什麼,隨着鏘和GCC targeting C++14,std::is_assignable<X*, Y*>::value
是false
?當我定位C++ 11時,我的設置是Clang true
。
這是因爲你的情況成爲右值。你不能分配一個右值。更改爲左值來代替:
std::is_assignable<X*&, Y*>::value
// ~^~
如果表達式
std::declval<T>() = std::declval<U>()
是中規中矩,在未計算的背景下
但你不能分配給一個右值(這是什麼declval<X*>()
會)。你需要對分配的左手側的左值:
std::is_assignable<X*&, Y*>::value
這將是真實的。如果Clang返回true,那絕對是Clang的bug。