为什么 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
.
我正在尝试使用我根据 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
.