@@ -1967,26 +1967,26 @@ struct iterator_state {
1967
1967
1968
1968
// Note: these helpers take the iterator by non-const reference because some
1969
1969
// iterators in the wild can't be dereferenced when const. C++ needs the extra parens in decltype.
1970
- template <typename Iterator, typename ResultType = decltype ((*std::declval<Iterator>()))>
1970
+ template <typename Iterator, typename ResultType = decltype ((*std::declval<Iterator & >()))>
1971
1971
struct iterator_access {
1972
- using result_type = decltype((*std::declval<Iterator>()));
1972
+ using result_type = decltype((*std::declval<Iterator & >()));
1973
1973
// NOLINTNEXTLINE(readability-const-return-type) // PR #3263
1974
1974
result_type operator ()(Iterator &it) const {
1975
1975
return *it;
1976
1976
}
1977
1977
};
1978
1978
1979
- template <typename Iterator, typename ResultType = decltype (((*std::declval<Iterator>()).first )) >
1979
+ template <typename Iterator, typename ResultType = decltype (((*std::declval<Iterator & >()).first )) >
1980
1980
struct iterator_key_access {
1981
- using result_type = decltype(((*std::declval<Iterator>()).first));
1981
+ using result_type = decltype(((*std::declval<Iterator & >()).first));
1982
1982
result_type operator ()(Iterator &it) const {
1983
1983
return (*it).first ;
1984
1984
}
1985
1985
};
1986
1986
1987
- template <typename Iterator, typename ResultType = decltype (((*std::declval<Iterator>()).second ))>
1987
+ template <typename Iterator, typename ResultType = decltype (((*std::declval<Iterator & >()).second ))>
1988
1988
struct iterator_value_access {
1989
- using result_type = decltype(((*std::declval<Iterator>()).second));
1989
+ using result_type = decltype(((*std::declval<Iterator & >()).second));
1990
1990
result_type operator ()(Iterator &it) const {
1991
1991
return (*it).second ;
1992
1992
}
0 commit comments