Index: base/tuple.h |
diff --git a/base/tuple.h b/base/tuple.h |
index e5872cc4fa8b90904554ed45f26b93800446a946..e73dd49c7c09d5bf9f0dd753b38e6a9eb60be072 100644 |
--- a/base/tuple.h |
+++ b/base/tuple.h |
@@ -29,6 +29,7 @@ |
#define BASE_TUPLE_H_ |
#include <stddef.h> |
+#include <tuple> |
#include "base/bind_helpers.h" |
#include "build/build_config.h" |
@@ -145,60 +146,10 @@ struct TupleTraits<P&> { |
// want filled by the dispatchee, and the tuple is merely a container for that |
// output (a "tier"). See MakeRefTuple and its usages. |
-template <typename IxSeq, typename... Ts> |
-struct TupleBaseImpl; |
template <typename... Ts> |
-using TupleBase = TupleBaseImpl<MakeIndexSequence<sizeof...(Ts)>, Ts...>; |
-template <size_t N, typename T> |
-struct TupleLeaf; |
+using Tuple = std::tuple<Ts...>; |
-template <typename... Ts> |
-struct Tuple final : TupleBase<Ts...> { |
- Tuple() : TupleBase<Ts...>() {} |
- explicit Tuple(typename TupleTraits<Ts>::ParamType... args) |
- : TupleBase<Ts...>(args...) {} |
-}; |
- |
-// Avoids ambiguity between Tuple's two constructors. |
-template <> |
-struct Tuple<> final {}; |
- |
-template <size_t... Ns, typename... Ts> |
-struct TupleBaseImpl<IndexSequence<Ns...>, Ts...> : TupleLeaf<Ns, Ts>... { |
- TupleBaseImpl() : TupleLeaf<Ns, Ts>()... {} |
- explicit TupleBaseImpl(typename TupleTraits<Ts>::ParamType... args) |
- : TupleLeaf<Ns, Ts>(args)... {} |
-}; |
- |
-template <size_t N, typename T> |
-struct TupleLeaf { |
- TupleLeaf() {} |
- explicit TupleLeaf(typename TupleTraits<T>::ParamType x) : x(x) {} |
- |
- T& get() { return x; } |
- const T& get() const { return x; } |
- |
- T x; |
-}; |
- |
-// Tuple getters -------------------------------------------------------------- |
-// |
-// Allows accessing an arbitrary tuple element by index. |
-// |
-// Example usage: |
-// base::Tuple<int, double> t2; |
-// base::get<0>(t2) = 42; |
-// base::get<1>(t2) = 3.14; |
- |
-template <size_t I, typename T> |
-T& get(TupleLeaf<I, T>& leaf) { |
- return leaf.get(); |
-} |
- |
-template <size_t I, typename T> |
-const T& get(const TupleLeaf<I, T>& leaf) { |
- return leaf.get(); |
-} |
+using std::get; |
// Tuple types ---------------------------------------------------------------- |
// |