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

时间:2018-07-06 05:36:14

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

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

为什么会这样?

1 个答案:

答案 0 :(得分:4)

查看std::declval的签名:

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

std::declval<int>()的类型为int&&,一个右值(xvalue)。您无法分配给右值int