Mark base::Tuple as final

Extending tuple confuses the compiler when we replace
base::Tuple with std::tuple.
This CL removes a base::Tuple extension and forbids it.

BUG=554987

Review URL: https://codereview.chromium.org/1462443002

Cr-Commit-Position: refs/heads/master@{#360404}


CrOS-Libchrome-Original-Commit: 904f19454a71c733205d9e68bc8faa93a6fdce3e
diff --git a/base/tuple.h b/base/tuple.h
index ef51d85..5a04858 100644
--- a/base/tuple.h
+++ b/base/tuple.h
@@ -150,7 +150,7 @@
 struct TupleLeaf;
 
 template <typename... Ts>
-struct Tuple : TupleBase<Ts...> {
+struct Tuple final : TupleBase<Ts...> {
   Tuple() : TupleBase<Ts...>() {}
   explicit Tuple(typename TupleTraits<Ts>::ParamType... args)
       : TupleBase<Ts...>(args...) {}
@@ -158,7 +158,7 @@
 
 // Avoids ambiguity between Tuple's two constructors.
 template <>
-struct Tuple<> {};
+struct Tuple<> final {};
 
 template <size_t... Ns, typename... Ts>
 struct TupleBaseImpl<IndexSequence<Ns...>, Ts...> : TupleLeaf<Ns, Ts>... {