【问题标题】:Why std::declval<int>() = std::declval<int>() is invalid?为什么 std::declval<int>() = std::declval<int>() 无效?
【发布时间】:2018-07-06 05:36:13
【问题描述】:

我正在尝试使用detector 我根据std::experiment::is_detected_v 编写的来检查类型是否可分配。但是std::declval&lt;int&gt;() = std::declval&lt;int&gt;() 无效,只有std::declval&lt;int&amp;&gt;() = std::declval&lt;int&gt;() 有效。

为什么会这样?

【问题讨论】:

  • @John Zwinck 那是我根据它写的。
  • 因为你需要=左侧的左值。
  • @o11c 但似乎int{} = int{} 是有效的。
  • @JiaHaoXu 不,这对我来说失败了。请注意,类与基元不同。

标签: c++ assignment-operator built-in-types


【解决方案1】:

std::declval的签名:

template<class T>
typename std::add_rvalue_reference<T>::type declval() noexcept;

std::declval&lt;int&gt;() 具有类型int&amp;&amp;,一个右值(xvalue)。您不能分配给右值 int

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多