Skip to content

zeus-cpp/expected

Repository files navigation

zeus::expected

Tests Workflow GitHub Release Conan Center

Backporting std::expected to C++17.

Features

Implemented C++ Standard Proposals:

  • P0323R12 <expected>
  • P2505R5 Monadic Functions For expected
  • P2549R1 std::unexpected<E> should have error() as member accessor

Implemented LWG Issues:

  • LWG-3836 std::expected<bool, E1> conversion constructor expected(const expected<U, G>&) should take precedence over expected(U&&) with operator bool
  • LWG-3843 std::expected<T,E>::value() & assumes E is copy constructible
  • LWG-3940 std::expected<void, E>::value() also needs E to be copy constructible
  • LWG-4026 Assignment operators of std::expected should propagate triviality
  • LWG-3877 incorrect constraints on const-qualified monadic overloads for std::expected
  • LWG-3886 Monad mo' problems

Enhancements:

  • Enhanced noexcept (covered by tests from MSVC's STL)

Compiler supports

Any compiler that supports C++17 should work.

Higher language standards are also supported, which can provide benefits such as enhanced constexpr capabilities.

List of known compiler supported:

  • MSVC v142 and later
  • GCC 8 and later

Feedbacks are welcome.

Building and testing

Catch2 is required to build the tests. You may choose any preferred package manager to introduce the requirements. Here is a conan way.

# install the requirements
conan install . -s build_type=Debug -b missing
# configure, build and test with cmake
# ...

Acknowledgements

  • tl-expected, the original code base this library came from.
  • MSVC's STL's massive, strong and robust tests.