#pragma once template struct reverse_view { typedef Container container_type; typedef typename container_type::const_reverse_iterator const_iterator; const_iterator begin () const { return container.rbegin (); } const_iterator end () const { return container.rend (); } container_type const &container; }; template reverse_view reverse (Container const &container) { return { container }; }