#pragma once namespace panda { template struct IteratorPair { Begin first; End second; IteratorPair (Begin begin, End end) : first(std::move(begin)), second(std::move(end)) {} const Begin& begin () const { return first; } const End& end () const { return second; } Begin& begin () { return first; } End& end () { return second; } }; template auto make_iterator_pair(Begin&& begin, End&& end) { return IteratorPair, std::decay_t>(std::forward(begin), std::forward(end)); } }