代码之家  ›  专栏  ›  技术社区  ›  JiaHao Xu

为什么std::declval<int>(=std::declval<int>()无效?

  •  3
  • JiaHao Xu  · 技术社区  · 6 年前

    我想用 detector 我是根据 std::experiment::is_detected_v 检查类型是否可赋值。然而 std::declval<int>() = std::declval<int>() 无效且仅 std::declval<int&>() = std::declval<int>() 是有效的。

    为什么会发生这种情况?

    1 回复  |  直到 6 年前
        1
  •  4
  •   llllllllll    6 年前

    看签名 std::declval 以下内容:

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

    std::declval<int>() 具有类型 int&& ,一个rvalue(xvalue)。不能将值指定给rvalue int 是的。