【问题标题】:Why does std::is_assignable return false with related pointer types?为什么 std::is_assignable 使用相关的指针类型返回 false?
【发布时间】:2015-12-29 20:23:35
【问题描述】:

给定两个非常简单的类:

class X
{
};

class Y : public X
{
};

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

【问题讨论】:

    标签: c++ c++14 typetraits


    【解决方案1】:

    这是因为在您的情况下,X* 变成了右值。您不能分配给右值。改为左值:

    std::is_assignable<X*&, Y*>::value
    //                  ~^~
    

    【讨论】:

      【解决方案2】:

      std::is_assignable 检查:

      如果表达式std::declval&lt;T&gt;() = std::declval&lt;U&gt;() 在未求值的上下文中格式正确

      但是您根本不能将 to 分配给一个右值(declval&lt;X*&gt;() 就是这样)。你需要一个 lvalue 在左手边的赋值:

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

      那是真的。如果 Clang 返回 true,那肯定是 Clang 错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-27
        相关资源
        最近更新 更多