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

Why std::declval<int>() = std::declval<int>() is invalid?

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

为什么会这样?

std::declval的签名:

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

std::declval<int>() 具有类型 int&&,一个右值 (xvalue)。您不能分配给右值 int.