diff --git a/src/type_traits b/src/type_traits index fa1de40c..8124f4ea 100644 --- a/src/type_traits +++ b/src/type_traits @@ -82,8 +82,9 @@ namespace std{ typedef __true_type value; }; - - + template struct remove_reference { typedef T type; }; + template struct remove_reference { typedef T type; }; + template struct remove_reference { typedef T type; }; } #pragma GCC visibility pop diff --git a/src/utility b/src/utility index b6546792..198d8ed0 100644 --- a/src/utility +++ b/src/utility @@ -56,7 +56,7 @@ namespace std{ pair(const T1& x, const T2& y) : first(x), second(y) { } template pair(const pair &p) : first(p.first), second(p.second) { } }; - + template bool operator==(const pair& x, const pair& y){ using namespace rel_ops; return (x.first == y.first && x.second==y.second); @@ -79,8 +79,18 @@ namespace std{ template pair make_pair(const T1& x, const T2& y){ return pair(x, y); } +} +#include +namespace std { + template constexpr T&& forward(typename std::remove_reference::type& t) noexcept{ + return static_cast(t); + } + template constexpr T&& forward(typename std::remove_reference::type&& t) noexcept{ + //static_assert(!std::is_lvalue_reference::value, "Can not forward an rvalue as an lvalue."); + return static_cast(t); + } } #pragma GCC visibility pop