commit 2113567588f66b255382098654b853d8af7b3601
Author: Louis Dionne <ldionne.2@gmail.com>
Date:   Sun Nov 29 16:36:09 2015 -0500

    Implement std::tuple_element with a compiler builtin

diff --git a/include/__tuple b/include/__tuple
index 57581e8..376367c 100644
--- a/include/__tuple
+++ b/include/__tuple
@@ -174,6 +174,17 @@ public:
     static_assert(_Ip != 0, "tuple_element index out of range");
 };
 
+#if __has_builtin(__nth_element)
+
+template <size_t _Ip, class _Hp, class ..._Tp>
+class _LIBCPP_TYPE_VIS_ONLY tuple_element<_Ip, __tuple_types<_Hp, _Tp...> >
+{
+public:
+    typedef __nth_element<size_t, _Ip, _Hp, _Tp...> type;
+};
+
+#else
+
 template <class _Hp, class ..._Tp>
 class _LIBCPP_TYPE_VIS_ONLY tuple_element<0, __tuple_types<_Hp, _Tp...> >
 {
@@ -188,6 +199,8 @@ public:
     typedef typename tuple_element<_Ip-1, __tuple_types<_Tp...> >::type type;
 };
 
+#endif // !__has_builtin(__nth_element)
+
 template <class ..._Tp>
 class _LIBCPP_TYPE_VIS_ONLY tuple_size<__tuple_types<_Tp...> >
     : public integral_constant<size_t, sizeof...(_Tp)>
