[array.tuple]/1 says that instantiating tuple_element<N, array<T, M>> is ill-formed if N >= M.  We didn't do that. Add a static_assert to cause a failure, and a test that checks that we failed

llvm-svn: 305191
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: 6db379a2c8bbc40f39a63c6c34216fe23c80127a
diff --git a/include/array b/include/array
index 79f7e0d..1278099 100644
--- a/include/array
+++ b/include/array
@@ -296,6 +296,7 @@
 template <size_t _Ip, class _Tp, size_t _Size>
 class _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, array<_Tp, _Size> >
 {
+    static_assert(_Ip < _Size, "Index out of bounds in std::tuple_element<> (std::array)");
 public:
     typedef _Tp type;
 };