Skip to content
Snippets Groups Projects

cleanup GaudiKernel/reverse.h

Merged Gerhard Raven requested to merge graven/Gaudi:cleanup-reverse into master
Files
3
@@ -22,51 +22,36 @@
// implies that it does meet the requirements for aggregate initializaton,
// which allows for {} initialization of its member.
//
#include <utility>
#include <iterator>
#include <utility>
template <typename Iterable>
struct reverse_wrapper {
Iterable iterable;
};
template <typename T>
reverse_wrapper<T> reverse( T&& iterable )
namespace details
{
return {std::forward<T>( iterable )};
}
#if defined __GNUC__ && __GNUC__ < 5
// std::rbegin and std::rend require gcc 5.0 or later (or clang 3.5 or later)
template <typename T>
auto begin( reverse_wrapper<T>& w ) -> decltype( w.iterable.rbegin() )
{
return w.iterable.rbegin();
}
template <typename T>
auto end( reverse_wrapper<T>& w ) -> decltype( w.iterable.rend() )
{
return w.iterable.rend();
template <typename Iterable>
struct reverse_wrapper {
Iterable iterable;
};
template <typename T>
auto begin( reverse_wrapper<T>& w )
{
using std::rbegin;
return rbegin( w.iterable );
}
template <typename T>
auto end( reverse_wrapper<T>& w )
{
using std::rend;
return rend( w.iterable );
}
}
#else
#include <iterator>
template <typename T>
auto begin( reverse_wrapper<T>& w )
{
using std::rbegin;
return rbegin( w.iterable );
}
template <typename T>
auto end( reverse_wrapper<T>& w )
details::reverse_wrapper<T> reverse( T&& iterable )
{
using std::rend;
return rend( w.iterable );
return {std::forward<T>( iterable )};
}
#endif
#endif
Loading