in include/range/v3/begin_end.hpp [316:365]
constexpr auto operator()(Rng const & rng) const
RANGES_DECLTYPE_AUTO_RETURN_NOEXCEPT
(
rend(rng)
)
};
}
/// \endcond
/// \ingroup group-core
/// \return The result of an unqualified call to the `begin` free function
/// with a const-qualified argument.
RANGES_GCC_BROKEN_CUSTPOINT namespace
{
constexpr auto&& cbegin = static_const<cbegin_end_detail::cbegin_fn>::value;
}
/// \ingroup group-core
/// \return The result of an unqualified call to the `end` free function
/// with a const-qualified argument.
RANGES_GCC_BROKEN_CUSTPOINT namespace
{
constexpr auto&& cend = static_const<cbegin_end_detail::cend_fn>::value;
}
/// \ingroup group-core
/// \return The result of an unqualified call to the `rbegin` free function
/// with a const-qualified argument.
RANGES_GCC_BROKEN_CUSTPOINT namespace
{
constexpr auto&& crbegin = static_const<cbegin_end_detail::crbegin_fn>::value;
}
/// \ingroup group-core
/// \return The result of an unqualified call to the `rend` free function
/// with a const-qualified argument.
RANGES_GCC_BROKEN_CUSTPOINT namespace
{
constexpr auto&& crend = static_const<cbegin_end_detail::crend_fn>::value;
}
/// \ingroup group-core
struct safe_begin_fn
{
/// \return `begin(rng)` if \p rng is an lvalue; otherwise, it returns `begin(rng)`
/// wrapped in \c ranges::dangling.
template<typename Rng, typename I = decltype(begin(std::declval<Rng &>()))>
constexpr meta::if_<std::is_lvalue_reference<Rng>, I, dangling<I>>
operator()(Rng && rng) const
{