# Policies

1. `base`

   Base class of most policy classes defining the narrow observer policies.

   1. `static void _ub(Impl &&)`

      Special function which causes noticeable hard undefined behaviour.

   2. `static bool _has_value(Impl &&) noexcept`

      Returns true if a value is present in the implementation passed in. Constexpr, never throws.

   3. `static bool _has_error(Impl &&) noexcept`

      Returns true if an error is present in the implementation passed in. Constexpr, never throws.

   4. `static bool _has_exception(Impl &&) noexcept`

      Returns true if an exception is present in the implementation passed in. Constexpr, never throws.

   5. `static bool _has_error_is_errno(Impl &&) noexcept`

      Returns true if the error code in the implementation passed in has a domain or category matching that of POSIX `errno`. Constexpr, never throws.

   6. `static auto &&_value(Impl &&) noexcept`

      Returns a reference to the value in the implementation passed in. Constexpr, never throws.

   7. `static auto &&_error(Impl &&) noexcept`

      Returns a reference to the error in the implementation passed in. Constexpr, never throws.

   8. `static auto &&_exception(Impl &&) noexcept`

      Returns a reference to the exception in the implementation passed in. Constexpr, never throws.

   9. `static void _set_has_value(Impl &&, bool) noexcept`

      Sets whether the implementation has a value. Constexpr, never throws.

   10. `static void _set_has_error(Impl &&, bool) noexcept`

       Sets whether the implementation has an error. Constexpr, never throws.

   11. `static void _set_has_exception(Impl &&, bool) noexcept`

       Sets whether the implementation has an exception. Constexpr, never throws.

   12. `static void _set_has_exception(Impl &&, bool) noexcept`

       Sets whether the implementation’s error code has a domain or category matching that of POSIX `errno`. Constexpr, never throws.

   13. `static void narrow_value_check(Impl &&) noexcept`

       Observer policy performing hard UB if no value is present. Constexpr, never throws.

   14. `static void narrow_error_check(Impl &&) noexcept`

       Observer policy performing hard UB if no error is present. Constexpr, never throws.

   15. `static void narrow_exception_check(Impl &&) noexcept`

       Observer policy performing hard UB if no exception is present. Constexpr, never throws.

   16. `static void on_outcome_construction(T *, U &&) noexcept`

       (>= Outcome v2.2.0) Hook invoked by the implicit constructors of `basic_outcome`.

   17. `static void on_outcome_construction(T *, U &&, V &&) noexcept`

       (>= Outcome v2.2.0) Hook invoked by the implicit constructors of `basic_outcome`.

   18. `static void on_outcome_copy_construction(T *, U &&) noexcept`

       (>= Outcome v2.2.0) Hook invoked by the converting copy constructors of `basic_outcome`.

   19. `static void on_outcome_copy_construction(T *, U &&, V &&) noexcept`

       (>= Outcome v2.2.0) Hook invoked by the converting copy constructors of `basic_outcome`.

   20. `static void on_outcome_in_place_construction(T *, in_place_type_t<U>, Args &&...) noexcept`

       (>= Outcome v2.2.0) Hook invoked by the in-place constructors of `basic_outcome`.

   21. `static void on_outcome_move_construction(T *, U &&) noexcept`

       (>= Outcome v2.2.0) Hook invoked by the converting move constructors of `basic_outcome`.

   22. `static void on_outcome_move_construction(T *, U &&, V &&) noexcept`

       (>= Outcome v2.2.0) Hook invoked by the converting move constructors of `basic_outcome`.

   23. `static void on_result_construction(T *, U &&) noexcept`

       (>= Outcome v2.2.0) Hook invoked by the implicit constructors of `basic_result`.

   24. `static void on_result_copy_construction(T *, U &&) noexcept`

       (>= Outcome v2.2.0) Hook invoked by the converting copy constructors of `basic_result`.

   25. `static void on_result_in_place_construction(T *, in_place_type_t<U>, Args &&...) noexcept`

       (>= Outcome v2.2.0) Hook invoked by the in-place constructors of `basic_result`.

   26. `static void on_result_move_construction(T *, U &&) noexcept`

       (>= Outcome v2.2.0) Hook invoked by the converting move constructors of `basic_result`.

2. `all_narrow`

   Policy class defining that hard undefined behaviour should occur on incorrect narrow and wide value, error or exception observation. Inherits publicly from `base`.

3. `error_code_throw_as_system_error<T, EC, EP>`

   Policy class defining that `EP` ought to be rethrown if possible, then the ADL discovered free function `outcome_throw_as_system_error_with_payload()` should be called on incorrect wide value observation. Inherits publicly from `base`. Can only be used with `basic_outcome`.

4. `error_code_throw_as_system_error<T, EC, void>`

   Policy class defining that the ADL discovered free function `outcome_throw_as_system_error_with_payload()` should be called on incorrect wide value observation. Inherits publicly from `base`. Can only be used with `basic_result`.

5. `exception_ptr_rethrow<T, EC, EP>`

   Policy class defining that the ADL discovered free function `rethrow_exception()` should be called on incorrect wide value observation. Inherits publicly from `base`. Can only be used with `basic_outcome`.

6. `exception_ptr_rethrow<T, EC, void>`

   Policy class defining that the ADL discovered free function `rethrow_exception()` should be called on incorrect wide value observation. Inherits publicly from `base`. Can only be used with `basic_result`.

7. `fail_to_compile_observers`

   Policy class defining that a static assertion should occur upon compilation of the wide value, error or exception observation. Inherits publicly from `base`.

8. `terminate`

   Policy class defining that `std::terminate()` should be called on incorrect wide value, error or exception observation. Inherits publicly from `base`.

9. `throw_bad_result_access<EC>`

   Policy class defining that `bad_result_access_with<EC>` should be thrown on incorrect wide value observation. Inherits publicly from `base`.

Last revised: December 13, 2018 at 21:10:19 UTC