Utility header-only library that can be easily integrated in a project. asl requires at least a C++14 conforming compiler, there are no other dependencies.
You can think of this library as something similiar to abseil (but asl is one year older than abseil) and some cherry-picked features from boost.
This library does not and will not use exceptions because it is designed to be used with tewi and reisen. Keep this in mind, please.
List of current asl headers:
ct_string
- A basic compile-time stringdebug_only
- A class that stores a value only in debug buildsdetect_features
- It allows to detect various platform and compiler featuresexpected
- Something similiar tostd::expected<T, E>
but withoutmap()
,value_or()
and other functionsfilesystem
- Various filesystem utilitiesfunctional
- Various useful functions for STL's containers (either wrappers around<algorithm>
or new functions like afor_each
that works onstd::tuple
)meta
- "Concepts" for C++14 and various metaprogramming utilsring
- Ring buffers (as a view adapter or as a static buffer)string_view
- constexpr-enabled incompletestd::string_view
for C++14types
- Rust-like typedefs, const by default, mutable versions provided with the mut prefixwrite_once
- A class that stores a write-once type. Useful if you need a const variable but you can't initialize it with lambdas for a reason or another
List of current GSL headers supported:
assert
-Ensures()
andExpects()
that supports additional messagesbyte
- Representation of a bytenot_null
- A way to say that a pointer must not be nullspan
- A read-write view on an arraystring_span
-std::string_view
but read-writeutil
- Various utilities
- asl
-
algorithm
- constexpr-enabled versions of<algorithm>
-
expected
- Something similiar to Boost.Outcome -
string_view
- constexpr-enabledstd::string_view
for C++14 - Implement something similiar to Boost.MPL in
meta
-
- gsl
- Implement
gsl::narrow
andgsl::narrow_cast
inutil
- Implement
Because it's an hell to setup in small project, it's a chore to setup on
Windows, it's a huge dependency, some of its components come as a dynamic
library, and it's too much complex.
This library is designed to be integrated in a project as a git submodule or by
simply copying the include
folder.