Я пытаюсь использовать detector
Я написал который согласно станд :: эксперимент :: is_detected_v проверить, присваивается ли тип. тем не мение 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&&
, rvalue (xvalue). Вы не можете присвоить rvalue int
,
Других решений пока нет …