Re-implement LWG 2770 - Fix tuple_size with structured bindings.

This patch implements the correct PR for LWG 2770. It also makes the primary
tuple_size template incomplete again which fixes part of llvm.org/PR31513.

llvm-svn: 290846
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: 1013fe3c0cfd7582e94ef2d4bfd79da7ea1a1289
diff --git a/include/tuple b/include/tuple
index 553d8e5..2f71cce 100644
--- a/include/tuple
+++ b/include/tuple
@@ -84,7 +84,7 @@
   constexpr T make_from_tuple(Tuple&& t); // C++17
 
 // 20.4.1.4, tuple helper classes:
-template <class T> class tuple_size;
+template <class T> class tuple_size; // undefined
 template <class... T> class tuple_size<tuple<T...>>;
 template <class T>
  constexpr size_t tuple_size_v = tuple_size<T>::value; // C++17