Index: doc/generic_types/evaluation/cpp-pair.hpp
===================================================================
--- doc/generic_types/evaluation/cpp-pair.hpp	(revision d87ade949c9bc50d35318bff143b34a6451031fa)
+++ doc/generic_types/evaluation/cpp-pair.hpp	(revision d87ade949c9bc50d35318bff143b34a6451031fa)
@@ -0,0 +1,30 @@
+#pragma once
+#include <utility>
+
+template<typename R, typename S> struct pair {
+	R first;
+	S second;
+
+	pair() = default;
+	pair( R&& x, S&& y ) : first( std::move(x) ), second( std::move(y) ) {}
+
+	bool operator< (const pair<R, S>& o) const {
+		return first < o.first || ( first == o.first && second < o.second );
+	}
+
+	bool operator<= (const pair<R, S>& o) const {
+		return first < o.first || ( first == o.first && second <= o.second );
+	}
+
+	bool operator== (const pair<R, S>& o) const { return first == o.first && second == o.second; }
+
+	bool operator!= (const pair<R, S>& o) const { return first != o.first || second != o.second; }
+
+	bool operator> (const pair<R, S>& o) const {
+		return first > o.first || ( first == o.first && second > o.second );
+	}
+
+	bool operator>= (const pair<R, S>& o) const {
+		return first > o.first || ( first == o.first && second >= o.second );
+	}
+};
