Index: include/utility
===================================================================
--- include/utility	(revision 185345)
+++ include/utility	(working copy)
@@ -617,28 +617,37 @@
 template<size_t... _Ip>
     using index_sequence = integer_sequence<size_t, _Ip...>;
 
-template <class _Tp, _Tp _Sp, _Tp _Ep, class _IntSequence>
-struct __make_integer_sequence_unchecked;
+template <class _IntSequence1, class _IntSequence2>
+struct __concat_integer_sequence;
 
-template <class _Tp, _Tp _Sp, _Tp _Ep, _Tp ..._Indices>
-struct __make_integer_sequence_unchecked<_Tp, _Sp, _Ep,
-                                         integer_sequence<_Tp, _Indices...>>
+template <class _Tp, _Tp ..._Indices1, _Tp ..._Indices2>
+struct __concat_integer_sequence<integer_sequence<_Tp, _Indices1...>,
+                                 integer_sequence<_Tp, _Indices2...>>
 {
-    typedef typename __make_integer_sequence_unchecked
-                     <
-                        _Tp, _Sp+1, _Ep,
-                        integer_sequence<_Tp, _Indices..., _Sp>
-                     >::type type;
+    typedef integer_sequence<_Tp, _Indices1..., _Indices2...> type;
 };
 
-template <class _Tp, _Tp _Ep, _Tp ..._Indices>
-struct __make_integer_sequence_unchecked<_Tp, _Ep, _Ep,
-                                         integer_sequence<_Tp, _Indices...>>
+template <class _Tp, _Tp _Sp, _Tp _Ep, unsigned long long _Diff = _Ep - _Sp>
+struct __make_integer_sequence_unchecked
 {
-    typedef integer_sequence<_Tp, _Indices...> type;
+    typedef typename __make_integer_sequence_unchecked<_Tp, _Sp, _Sp + _Tp(_Diff/2)>::type __first;
+    typedef typename __make_integer_sequence_unchecked<_Tp, _Sp + _Tp(_Diff/2), _Ep>::type __second;
+    typedef typename __concat_integer_sequence<__first, __second>::type type;
 };
 
+template <class _Tp, _Tp _Sp, _Tp _Ep>
+struct __make_integer_sequence_unchecked<_Tp, _Sp, _Ep, 1>
+{
+    typedef integer_sequence<_Tp, _Sp> type;
+};
+
 template <class _Tp, _Tp _Ep>
+struct __make_integer_sequence_unchecked<_Tp, _Ep, _Ep, 0>
+{
+    typedef integer_sequence<_Tp> type;
+};
+
+template <class _Tp, _Tp _Ep>
 struct __make_integer_sequence
 {
     static_assert(is_integral<_Tp>::value,
@@ -646,7 +655,7 @@
     static_assert(0 <= _Ep, "std::make_integer_sequence input shall not be negative");
     typedef typename __make_integer_sequence_unchecked
                      <
-                        _Tp, 0, _Ep, integer_sequence<_Tp>
+                        _Tp, 0, _Ep
                      >::type type;
 };
 
