constexpr auto operator()

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
            {