|  | /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- | 
|  | * vim: set ts=8 sts=4 et sw=4 tw=99: | 
|  | * This Source Code Form is subject to the terms of the Mozilla Public | 
|  | * License, v. 2.0. If a copy of the MPL was not distributed with this | 
|  | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | 
|  |  | 
|  | #ifndef js_Vector_h | 
|  | #define js_Vector_h | 
|  |  | 
|  | #include "mozilla/Vector.h" | 
|  |  | 
|  | /* Silence dire "bugs in previous versions of MSVC have been fixed" warnings */ | 
|  | #ifdef _MSC_VER | 
|  | #pragma warning(push) | 
|  | #pragma warning(disable:4345) | 
|  | #endif | 
|  |  | 
|  | namespace js { | 
|  |  | 
|  | class TempAllocPolicy; | 
|  |  | 
|  | namespace detail { | 
|  |  | 
|  | template <typename T> | 
|  | struct TypeIsGCThing : mozilla::FalseType | 
|  | {}; | 
|  |  | 
|  | // Uncomment this once we actually can assert it: | 
|  | //template <> | 
|  | //struct TypeIsGCThing<JS::Value> : mozilla::TrueType | 
|  | //{}; | 
|  |  | 
|  | } // namespace detail | 
|  |  | 
|  | template <typename T, | 
|  | size_t MinInlineCapacity = 0, | 
|  | class AllocPolicy = TempAllocPolicy | 
|  | // 1800 is MSVC2013.  Optimistically assume MSVC2015 (1900) is fixed. | 
|  | // If you're porting to MSVC2015 and this doesn't work, extend the | 
|  | // condition to encompass that additional version (but *do* keep the | 
|  | // version-check so we know when MSVC's fixed). | 
|  | #if !defined(_MSC_VER) || (1800 <= _MSC_VER && _MSC_VER <= 1800) | 
|  | // Don't use this with JS::Value!  Use JS::AutoValueVector instead. | 
|  | , typename = typename mozilla::EnableIf<!detail::TypeIsGCThing<T>::value>::Type | 
|  | #endif | 
|  | > | 
|  | using Vector = mozilla::Vector<T, MinInlineCapacity, AllocPolicy>; | 
|  |  | 
|  | } // namespace js | 
|  |  | 
|  | #endif /* js_Vector_h */ |