Version 1.1.1
[Summary]
StormByte Base is the C++26 foundation of the StormByte suite.
Every other module links this library.
This repository is not Buffer, Config, Crypto, Database, Logger, Multimedia, Network or System — those live in their own repos and depend on Base.
Public headers under StormByte/ cover exceptions, Expected, little-endian Serializable, strings, paths, UUID v4, bitmasks, clonable types, ThreadLock, and StormByte::Type concepts.
If you landed here from a release link and have not read the tree:
- What this module is, how to build it, and short examples: README.md
- License: GNU Lesser General Public License version 3 or later, LICENSE
Added
- Type category concepts —
LvalueReferenceandRvalueReference(std::is_lvalue_reference/std::is_rvalue_reference), next to the existingReference. - SystemError —
Exceptionspecialization forStormByte::Systemhelpers.
Changed
- System::ExecutablePath — throws
SystemErrorinstead of returning"NOPATH". Paths longer than 256 bytes are resolved.
Fixed
- Type::CopyConstructible / CopyAssignable — no longer wrap
std::is_copy_*alone. They require a realT{src}/dest = srcand recurse intovalue_typeonly whenTis aType::Containerand not aType::View.std::span<std::unique_ptr<T>>stays copyable;std::vector<std::unique_ptr<T>>does not. - Type::HasPushBack / HasPushFront / HasInsert — accept
value_type&&as well asconst value_type&.std::vector<std::unique_ptr<T>>is nowHasPushBack, soIterable::addtakes thepush_backpath. - Iterable::add — one forwarding
add(T&&)plus a by-value sink for braced-init (add({"k", v})). The sink writes to the container; it does not calladdagain (that recursed until a stack overflow). clang-cl / MSVC no longer instantiatepush_back(const unique_ptr&). - Iterable container constructor — single
Iterable(C&&)constrained toContainer. An lvalue copy requiresType::CopyConstructibleonvalue_type; a move requiresType::MoveConstructible. - Iterable copy / move — defaulted copy and copy-assign require
Type::CopyConstructible/Type::CopyAssignableonContainer; move and move-assign requireType::MoveConstructible/Type::MoveAssignable.Iterable<std::vector<std::unique_ptr<T>>>is move-only. - Iterable::Iterator / ConstIterator — arithmetic (
+=,-=,+, difference) usesstd::advance/std::distanceinstead ofm_it += n, so it compiles on bidirectional containers (list,map,set).reference/pointercome fromstd::iterator_traitsof the wrapped iterator, notContainer::reference(*itonstd::setisconst T&). - System::TempFileName — throws
SystemErrorinstead ofstd::runtime_error. The file is created and left on disk; the caller unlinks it. Windows still only uses the first three characters ofprefix. - System::ExecutablePath — grows the platform buffer instead of truncating at 256 bytes (
GetModuleFileNameW/readlink). Failure isSystemError, not a fake path. - System::CurrentPath — wraps
std::filesystem::filesystem_errorinSystemErrorinstead of leaking a standard exception. - Iterable copy / copy-assign — user-provided members with
if constexpronType::CopyConstructible/CopyAssignable. clang-cl / MSVCdllexportof a derived class no longer instantiatesvector<unique_ptr<T>>copy viarequires = default.