Chromium Code Reviews| 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; |