BDE 4.26.0 Release

Schedule

  • The BDE team announces that the BDE 4.26.0 production release was completed on Saturday, July 5, 2025.

BDE 4.26.0 Release Highlights

balber::BerEncoder Enhanced to Improve Decoder Performance

balber::BerEncoder has been augmented to emit array length hints when possible. To enable hints, the balber::BerEncoderOptions EncodeArrayLengthHints attribute must be set true (using setEncodeArrayLengthHints).

Note that for large arrays, decoder performance may improve by over 10%.

WARNING: It is only safe to use this mode when communication with a balber BER decoder built using this release or later, or a decoder having the balber::BerDecoderOptions SkipUnknownElements attribute set to true.

New Component: balber_berencoderoptionsutil

The new component, balber_berencoderoptionsutil, provides a struct of utility functions, balber::BerEncoderOptionsUtil, for configuring balber::BerEncoderOptions objects. In particular, this utility can be used to set the recommended options needed for encoding BER messages that are time-efficient to decode. This utility can also be used to set a balber::BerEncoderOptions object to its default state.

bslfmt::Streamed Wrapper Facilitates Use of bsl::format

Use of bsl::format` for a user-defined type requires a user-supplied specialization of bsl::format for that type. Assuming that the user-defined type is already stream-able, use of the new bslfmt::Streamed wrapper readily makes that type formattable as well.

bsl::optional<TYPE> Usable with constexpr for Non-Allocator-Aware TYPE

Methods and free functions associated with std::optional<TYPE> that are constexpr in C++17 or C++20 are now also constexpr for bsl::optional<TYPE> in the respective language version, provided that TYPE is not allocator-aware.

bsl_ Headers Can Now Be Included Regardless of Language Version

All bsl_ headers can now be included in all language versions (e.g., C++03, C++11, …. C++20). For example, the <bsl_random.h> header can be included in C++03 even though <random> is not available in C++03. In such cases, including the bsl_ header is not an error; it silently succeeds and simply does not provide the declarations that are absent from the standard library (in the language version being used).

This change makes it easier to write code that provides additional functionality in later language versions and must include additional headers to provide such functionality.

Previously, inclusion of a header such bsl_initializer_list.h could not be included when compiling for a C++ version that does not support the language features used in that header:

#include <bsls_compilerfeatures.h>
#ifdef BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS
#include <bsl_initializer_list.h>
#endf

Now, all bsl_ headers can now simply be included at the top of the file without guards.

#include <bsls_compilerfeatures.h>
#include <bsl_initializer_list.h>  // Now, compiles even in C++03.

class Vector {

    // . . .

  public:
    /// CREATORS

    /// Create a `Vector` object that holds no values.
    Vector();

#ifdef BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS
    /// Create a `Vector` object that holds a copy of the values from the
    /// specified `il`.
    Vector(bsl::initializer_list<int> il);
#endif
};

Notice that preprocessor guards are still required around the declaration (and the definition, not shown) of the construction that depends on initializer list.

balb::ControlManager Supports Fallback Handler

The balb::ControlManager dispatches received messages to previously registered handler functors based on the message “prefix” – i.e, the first word of the message.

  • Previously, messages having prefixes that match none of the previously registered handers were simply ignored.

  • Now, users have the option to specify a fallback (default) hander for for messages that don’t match any of the regular handlers. If users do not specify such a default handler, the previous policy (ignoring such messages) is followed.

See Default Handler

Fixed Tickets

Summary

balxml_typesparserutil: parsing unrecognized vector types causes safe asserts to fail

bsl::variant - Add Support for operator<<

Make BSLS_IDENT_RCSID arrays const

[BALL] Add bsl::format style macros

Allow C++11-only headers to be included in C++03

Make constructors for bsl::optional<> appropriately constexpr

Support default handler in balb_controlmanager

Provide a wrapper for formatting types with a streaming operator

Fix for data race in bslmt::Latch reported by TSAN

Request for Review – TSAN Race Fix in ball::AsyncFileObserver (Test Case 9)

please correct bslfmt_format test compile error

balst: make more resilient when /proc unavailable on Solaris

[bde-tools] Add toolchain file for Homebrew llvm installations for Darwin

implement array length hints for ber

create balber_berencoderoptionsutil

implement bdlat array functions reserve and use in balber_berencoder

Complexity of unionNonBusinessDays assertions

correct baexml_schemaparserintegrationtest.t case 1

Please add visit functionality to bdljsn::Json

StripedUnorderedMapImpl: stripe locks remain unreleased when visitor functions throw

please clean warnings observed in nightly build for bsl and bdl with gcc-13

Apple/Darwin preprocessor macro confusion

please correct bslfmt_formatterspecificationnumericvalue.t.cpp compile error

Split default ctor for bdlmt::EventScheduler

Fix semaphore collisions on darwin