Index: base/tuple.h |
diff --git a/base/tuple.h b/base/tuple.h |
index 885413f7570e980dbc4c4a2caa4108b2594b8f1a..285b7d0807711c0964ebebead3de84727c8f3698 100644 |
--- a/base/tuple.h |
+++ b/base/tuple.h |
@@ -40,6 +40,58 @@ 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 IndexSequence<0> {}; |
+ |
+template <> |
+struct IndexSequence<0,1> {}; |
+ |
+template <> |
+struct IndexSequence<0,1,2> {}; |
+ |
+template <> |
+struct IndexSequence<0,1,2,3> {}; |
+ |
+template <> |
+struct IndexSequence<0,1,2,3,4> {}; |
+ |
+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>; |
+}; |
+ |
+#else |
+ |
template <size_t... Ns> |
struct MakeIndexSequenceImpl<0, Ns...> { |
using Type = IndexSequence<Ns...>; |
@@ -49,6 +101,8 @@ template <size_t N, size_t... Ns> |
struct MakeIndexSequenceImpl<N, Ns...> |
mdempsky
2014/12/15 22:17:55
I previously wrote this as:
template <size_t
|
: MakeIndexSequenceImpl<N - 1, N - 1, Ns...> {}; |
+#endif |
+ |
template <size_t N> |
using MakeIndexSequence = typename MakeIndexSequenceImpl<N>::Type; |