Freestanding & embedded subset

No-heap, no-exception C++ on constrained targets.

The working subset: -fno-exceptions -fno-rtti, static allocation, placement new over pools, templates instead of virtuals where codegen must be predictable.

static std::aligned_storage_t<sizeof(Driver), alignof(Driver)> slot;
Driver* drv = new (&slot) Driver(cfg);   // no heap

Relaxed constexpr moves lookup tables from flash-init code to compile time.

if constexpr handles per-board variants without macros; string_view points at flash-resident text with zero RAM cost.

constinit guarantees flash-friendly initialization, <bit> covers register math, concepts constrain HAL templates — all exception-free by nature.

constinit RingBuffer<Event, 32> isr_queue;   // no runtime init in startup

Freestanding expands formally (P1642 pulls much of <utility>, <ranges>, <expected> in): std::expected is the sanctioned error channel where exceptions are off.

std::expected<Frame, ErrC> read_frame();   // no-exception error path

std::inplace_vector is the standard fixed-capacity container the ETL crowd always had privately; freestanding coverage keeps growing.

std::inplace_vector<Client, MAX_CLIENTS> clients;   // capacity in the type
C++29direction · not adopted

Direction: further freestanding expansion and (speculatively) profile-based subsets for safety-critical toolchains.

C++26 per the final working draft; C++29 rows are proposals and direction, not adopted features.