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

时间:2015-10-01 17:25:52

标签: c++ c++14 typetraits

给出两个非常简单的类:

class X
{
};

class Y : public X
{
};

为什么,Clang和GCC targeting C++14std::is_assignable<X*, Y*>::valuefalse?当我以C ++ 11为目标时,我的设置为true

2 个答案:

答案 0 :(得分:25)

这是因为在您的情况下<android.support.design.widget.CoordinatorLayout xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:focusableInTouchMode="true"> <android.support.design.widget.AppBarLayout android:id="@+id/appBarLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:fitsSystemWindows="true"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/seffafCollapsingToolbarLayout" android:layout_width="match_parent" android:layout_height="240dp" android:minHeight="?attr/actionBarSize" app:expandedTitleMarginEnd="164dp" app:expandedTitleMarginStart="148dp" app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed"> <ImageView android:id="@+id/header" android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/haber_icerik_resim" android:fitsSystemWindows="true" android:scaleType="centerCrop" app:layout_collapseMode="parallax" /> <android.support.v7.widget.Toolbar android:id="@+id/haber_toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:theme="@style/ToolbarColoredBackArrow" app:layout_collapseMode="pin"/> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <android.support.v7.widget.RecyclerView android:id="@+id/newsRecyclerView" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical" android:clickable="true" android:background="@color/mainBackground" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 成为左值。您无法分配到右值。改为左值:

X*

答案 1 :(得分:25)

std::is_assignable检查:

  

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

但是您无法将分配给一个右值(这是declval<X*>()将会是什么)。您需要在作业的左侧使用左值

std::is_assignable<X*&, Y*>::value

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