3.18.00
Welcome to the 3.18.00 release of EASTL. Thank you to everyone who's contributed to this release.
Feature additions and standard updates:
- Implemented eastl::bit_cast.
- Implemented eastl::is_nothrow_invocable.
- Implemented eastl::to_underlying.
- Implemented LWG defect 2106: move_iterator doesn't work with iterators which don't return a reference
Bugfixes:
-
eastl::invoke fixes:
- invoke now correctly deduces the function signature when invoking a member function or member data pointer on a reference_wrapper.
Previously, this would fail if using arguments which were convertible to the correct type, but did not exactly match. - invoke now correctly forwards arguments when invoking a member data pointer.
- invoke now correctly uses decay_t instead of remove_reference_t in a number of places.
- invoke_result_t no longer uses decay_t on the type being invoked.
- invoke is now constexpr.
- invoke now correctly deduces the function signature when invoking a member function or member data pointer on a reference_wrapper.
-
eastl::variant fixes:
- Fixed incorrect results from some relational operators when valueless_by_exception() is true.
- Fixed incorrect index when an exception is thrown during emplace().
-
Removed assertions from some eastl::array functions in order to ensure usability in constexpr contexts.
-
eastl::make_signed and eastl::make_unsigned now work correctly for enum types and volatile-qualified types.
-
Containers which support find_as now support using it with keys of the same type as the container's key.
-
Disallowed use of smart pointer default deleter on incomplete types.
-
Fixed an issue where nodes for some data structures could be under-aligned.
-
Properly supported arrays in eastl::cbegin() and eastl::cend().
-
Fixed creation of zero-length spans and subspans.
-
eastl::is_reference now returns true for rvalue references.
-
Fixed a potential out-of-bounds memory access when sorting certain containers.
Optimizations:
- eastl::variant optimizations:
- Avoided unnecessary double index checks in variant relational operators.
- Avoided unnecessary work in valueless_by_exception() when exceptions are disabled.
- Optimized visit() for the common case of visiting a single variant.
- Removed unnecessary copies during visit().