Почему std :: declval & lt; int & gt; () = std :: declval & lt; int & gt; () недопустим?

Я пытаюсь использовать detector Я написал который согласно станд :: эксперимент :: is_detected_v проверить, присваивается ли тип. тем не мение std::declval<int>() = std::declval<int>() является недействительным и только std::declval<int&>() = std::declval<int>() является действительным.

Почему это происходит?

3

Решение

Посмотрите на подпись std::declval:

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

std::declval<int>() имеет тип int&&, rvalue (xvalue). Вы не можете присвоить rvalue int,

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]