Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

A container reverse-adaptor for range-based for loops

10 views
Skip to first unread message

Bonita Montero

unread,
Sep 19, 2021, 5:23:53 AM9/19/21
to
#pragma once
#if defined(__cpp_concepts)
#include <concepts>

template<typename Container>
concept concept_reverser = requires( Container cont )
{
{ cont.rbegin() } -> std::convertible_to<typename
Container::reverse_iterator>;
{ cont.rend() } -> std::convertible_to<typename
Container::reverse_iterator>;
};
#endif

template<typename Container>
#if defined(__cpp_concepts)
requires concept_reverser<Container>
#endif
struct reverser
{
using iterator = typename Container::reverse_iterator;
reverser( Container &cont );
iterator begin();
iterator end();
private:
Container &m_cont;
};

template<typename Container>
#if defined(__cpp_concepts)
requires concept_reverser<Container>
#endif
inline
reverser<Container>::reverser( Container &cont ) :
m_cont( cont )
{
}

template<typename Container>
#if defined(__cpp_concepts)
requires concept_reverser<Container>
#endif
inline
typename reverser<Container>::iterator reverser<Container>::begin()
{
return m_cont.rbegin();
}

template<typename Container>
#if defined(__cpp_concepts)
requires concept_reverser<Container>
#endif
inline
typename reverser<Container>::iterator reverser<Container>::end()
{
return m_cont.rend();
}

Bonita Montero

unread,
Sep 19, 2021, 6:13:12 AM9/19/21
to
Am 19.09.2021 um 11:23 schrieb Bonita Montero:
> ...
> template<typename Container>
> concept concept_reverser = requires( Container cont )
> {
typename Container::reverse_iterator;
>     { cont.rbegin() } -> std::convertible_to<typename
> Container::reverse_iterator>;
>     { cont.rend()   } -> std::convertible_to<typename
> Container::reverse_iterator>;
> };
> #endif
> ...
0 new messages