Я пытаюсь использовать detector Я написал, что в соответствии с std :: эксперимент :: is_detected_v , чтобы проверить, присваивается ли тип. Однако std::declval<int>() = std::declval<int>() недопустимо и допустимо только std::declval<int&>() = std::declval<int>().
detector
std::declval<int>() = std::declval<int>()
std::declval<int&>() = std::declval<int>()
Почему это происходит?
Посмотрите на подпись std::declval:
std::declval
template<class T> typename std::add_rvalue_reference<T>::type declval() noexcept;
std::declval<int>() имеет тип int&&, значение (xvalue). Вы не можете присвоить значение int.
std::declval<int>()
int&&
int