Release candidate for 3.27.00 #579
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Changes in the 3.27.00 ... 3.21.23 window
shared_ptr's ref counting when releasing the last count.eastl::atomic_raw_Xwhich provides an API similar to that ofeastl::atomic<T>but which can operate on non-atomic variables. This can be used as a last resort in situations where we're interested in specifying memory order semantics but cannot change the type of the variable toeastl::atomic<T>(for example due to having to cross established API boundaries which can't change). We have only added support to operate on integral and pointer types. Seeatomic_raw.hfor details.memory_order_read_depends:relaxedloads by default so TSAN understands the load as an atomic load. This can be changed to useacquiresemantics instead with a config property.__tsan_memory_order_consumeload so TSAN doesn't flag address dependent loads as errors, that's the intention for theread_dependsmemory order.atomic<T>::acquire_fencefor integralT, which is intended for optimal synchronization when doing reference counting through the atomic.hashtableandintrusive_hashtablesobegin()will early out when they are empty instead of iterating through the entire bucket array.get<I>()for tuples with an empty tuple member.tuple_elementfor volatile types to match the standard.vector::push_back()inserting the wrong value with an element from the vector. The vector now constructs the new element before moving the internal array when growing the vector.fixed_functionwould allocate when another fixed function with a smaller buffer was assigned to it. I.e. the following would lead to allocationsfixed_function(this previously incorrectly triggered an allocation instead of asserting)expectedandoptional.vectorto have more than0x80000000elements without asserting.vectorto verify we don't overflowsize_typewhen inserting elements into it.bonus/flags.hheader).fixed_vectorimplementation to reset capacity to starting value when using aresize()function that provokes a move back to the initially buffered range.fixed_vectorconstructors to match vector.bitvector"this_type" to properly specify container to prevent invalid template matches (eg swap functions that match bitvectors with different container types).any()andall()member functions tobitvector.array<T, N>having a default ofN = 1. This makes array conformant to the standard and reduces potential confusion with deduction guides, such as:make_from_tuple<T>(tuple<Ts...>)construct(), with the same semantics as the standard's Allocator construct function. EASTL now uses this wherever an allocator may be used to construct an object of the allocator's type (ie. containers, shared_ptr, shared_array and fixed_swap).is_default_constructible_v<T>may now be invoked on more types. This may cause compilations failures due to a C++ language defect. The language defect is that type traits may fail because it's unclear whether a nested type should be treated as a complete type in some contexts. In particular, a nested type with non-static data member initialization causes eastl::is_default_constructible_v<> to evaluate to false on Clang & GCC. For more details see llvm bug report and the defect tracked by the C++ standards committee.As a workaround to the language defect, declare a default constructor explicitly, eg.
MyType() noexcept = default;fixed_vectorandlistincorrectly default initializing their elements. New behaviour is to value initialize them.find_as()with default hash and equality objects forhash_set,hash_multiset,fixed_hash_set,fixed_hash_multiset,intrusive_hash_set,intrusive_hash_multiset. Use heterogeneous comparison lookup instead. See the FAQ and Best Practices pages for explanation of these new overloads.isnan()andlerp(). Relax the requirement to C++17 for safe integer comparison functions.countl_zero()for unsigned 128 bit types.bitset<eastl_uint128_t>::count()implementation.bit_widthnow has a return type ofint, which matches the standard.EASTL_STD_ITERATOR_CATEGORY_ENABLEDand replace usages ofEASTL_ITC_NSwitheastl, as it's no longer required.SetAssertionFailureFunctionthat uses instruction pointer for assertion callback to handle exact location of assertion.eastl::late_constructed's ctor so that dynamic initializers don't get generated for global instances when optimization is disabled (e.g. for debug builds).eastl::functioninstead of potentially letting it fall through and return garbage.eastl::spanwhich broke on version 3.21.20.variant<Ts...>get<T>(variant<Ts...>)andget<size_t>(variant<Ts...>)will now assert / throw if the variant doesn't hold the requested alternative type.visit(Visitor&&, Variants&&)/visit<Result>(Visitor&&, Variants&&)overloads per the standard, ie. the visitor has to be callable with the variants' alternative types for the visit overload to be enabled.variant<Ts...>; internally it no longer uses a pointer for dispatch to the alternative type.variant<Ts...>::operator=<T>(T&&)) now calls the assignment operator if the variant already holds the alternative type that is being assigned (per the standard).emplace<I>(...)that the alternative type forImust be unique.swap(variant<Ts...>&, variant<Ts...>&)is now implemented in terms ofswap()and move construction rather than just move construction (per the standard).hash<variant<Ts...>>, including disabling the hash when the alternative types do not have a hash specialization.in_place_type<T>andin_place_index<size_t>. Removein_place<T>,in_place<size_t>.scoped_ptr<T>'s operations noexcept.EASTL_THROW_OR_ASSERTso it is defined afterEASTL_EXCEPTIONS_ENABLED.optional<T>Tsupports the operation.optional<T>(const T&),optional<T>(T&&)constructors (not a part of the standard).optional<T>(in_place_t, T, Args...)constructor so that it doesn't use list initialization.is_nothrow_constructibleto use intrinsic if available.ring_buffercomparison functions (operator <andoperator==).eastl::bisetso it compiles with C++14.std::causing issues when compiling with C++14.eastl::includestoalgorithm.h. This function evaluates if an ordered range is a subsequence of another (docs).expected(P0323). This is available in EASTL if C++17 or later is enabled.transparent_string_hash, for use inhash_map.hash<T>specializations for strings with any allocator.deque::set_allocator()assertion so that it will assert when non-empty.set_allocator()forvector,string,shared_array,map,set,hash_map,hash_set,tuple_vector. This validates that an allocation hasn't already been made when changing the allocator, otherwise memory will be leaked / deallocated from the incorrect allocator.set,multiset,hash_set,hash_multiset,fixed_set,fixed_multiset,fixed_hash_set,fixed_hash_multiset,vector_set,vector_multiset,vector_map&vector_multimap. See the FAQ and Best Practices pages for explanation of these new overloads.eastl::finallyasnodiscard.pairconstructor and assignment so that it's enabled for types that are constructible to and assignable to, respectively, the member types rather than convertible to.removeandremove_copyto comply with std implementation, such that they reorder elements using move and copy assignment respectively.return_temporary_buffer()andapply_cv<T, U, bool, bool>.