Index: base/tuple.h |
diff --git a/base/tuple.h b/base/tuple.h |
index 4408074335b3bd2c28b5ee5719a0b63ba262971c..41c6a00191971e4eabfd2aa6dbf6d3308a6b0eca 100644 |
--- a/base/tuple.h |
+++ b/base/tuple.h |
@@ -40,6 +40,50 @@ struct IndexSequence {}; |
template <size_t... Ns> |
struct MakeIndexSequenceImpl; |
+#if defined(_PREFAST_) && defined(OS_WIN) |
+ |
+// Work around VC++ 2013 /analyze internal compiler error: |
+// https://connect.microsoft.com/VisualStudio/feedback/details/1053626 |
+ |
+template <> struct MakeIndexSequenceImpl<0> { |
+ using Type = IndexSequence<>; |
+}; |
+template <> struct MakeIndexSequenceImpl<1> { |
+ using Type = IndexSequence<0>; |
+}; |
+template <> struct MakeIndexSequenceImpl<2> { |
+ using Type = IndexSequence<0,1>; |
+}; |
+template <> struct MakeIndexSequenceImpl<3> { |
+ using Type = IndexSequence<0,1,2>; |
+}; |
+template <> struct MakeIndexSequenceImpl<4> { |
+ using Type = IndexSequence<0,1,2,3>; |
+}; |
+template <> struct MakeIndexSequenceImpl<5> { |
+ using Type = IndexSequence<0,1,2,3,4>; |
+}; |
+template <> struct MakeIndexSequenceImpl<6> { |
+ using Type = IndexSequence<0,1,2,3,4,5>; |
+}; |
+template <> struct MakeIndexSequenceImpl<7> { |
+ using Type = IndexSequence<0,1,2,3,4,5,6>; |
+}; |
+template <> struct MakeIndexSequenceImpl<8> { |
+ using Type = IndexSequence<0,1,2,3,4,5,6,7>; |
+}; |
+template <> struct MakeIndexSequenceImpl<9> { |
+ using Type = IndexSequence<0,1,2,3,4,5,6,7,8>; |
+}; |
+template <> struct MakeIndexSequenceImpl<10> { |
+ using Type = IndexSequence<0,1,2,3,4,5,6,7,8,9>; |
+}; |
+template <> struct MakeIndexSequenceImpl<11> { |
+ using Type = IndexSequence<0,1,2,3,4,5,6,7,8,9,10>; |
+}; |
+ |
+#else // defined(WIN) && defined(_PREFAST_) |
+ |
template <size_t... Ns> |
struct MakeIndexSequenceImpl<0, Ns...> { |
using Type = IndexSequence<Ns...>; |
@@ -49,6 +93,8 @@ template <size_t N, size_t... Ns> |
struct MakeIndexSequenceImpl<N, Ns...> |
: MakeIndexSequenceImpl<N - 1, N - 1, Ns...> {}; |
+#endif // defined(WIN) && defined(_PREFAST_) |
+ |
template <size_t N> |
using MakeIndexSequence = typename MakeIndexSequenceImpl<N>::Type; |