Почему std :: declval <int>() = std :: declval <int>() недопустим? - PullRequest
0 голосов
/ 06 июля 2018

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

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

1 Ответ

0 голосов
/ 06 июля 2018

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

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

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

...