diff --git a/404.html b/404.html index 66b6847fac..b0546befb9 100644 --- a/404.html +++ b/404.html @@ -5,7 +5,7 @@ - + 404 Page not found :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome + +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/_footer/index.html b/_footer/index.html index db11f898de..f4f79790d5 100644 --- a/_footer/index.html +++ b/_footer/index.html @@ -5,7 +5,7 @@ - + :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/_header/index.html b/_header/index.html index 5593bdaee8..1221e8cc44 100644 --- a/_header/index.html +++ b/_header/index.html @@ -5,7 +5,7 @@ - + :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/abi-stability/index.html b/abi-stability/index.html index 58defdcc77..5e3b821875 100644 --- a/abi-stability/index.html +++ b/abi-stability/index.html @@ -5,7 +5,7 @@ - + Future ABI stability guarantees :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/alternatives/error_code/index.html b/alternatives/error_code/index.html index bcc68866e7..9be281d5bb 100644 --- a/alternatives/error_code/index.html +++ b/alternatives/error_code/index.html @@ -5,7 +5,7 @@ - + std error codes :: Outcome documentation @@ -598,108 +598,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/alternatives/exceptions/index.html b/alternatives/exceptions/index.html index 808f163beb..7d4d864c71 100644 --- a/alternatives/exceptions/index.html +++ b/alternatives/exceptions/index.html @@ -5,7 +5,7 @@ - + std exception throws :: Outcome documentation @@ -598,108 +598,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/alternatives/expected/index.html b/alternatives/expected/index.html index 1744438061..770032c09d 100644 --- a/alternatives/expected/index.html +++ b/alternatives/expected/index.html @@ -5,7 +5,7 @@ - + std expected :: Outcome documentation @@ -598,108 +598,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/alternatives/index.html b/alternatives/index.html index e3e7c4c372..1cfd8e7a13 100644 --- a/alternatives/index.html +++ b/alternatives/index.html @@ -5,7 +5,7 @@ - + Review of Error Handling Frameworks :: Outcome documentation @@ -598,108 +598,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/alternatives/leaf/index.html b/alternatives/leaf/index.html index 8a436fb313..a7028f0936 100644 --- a/alternatives/leaf/index.html +++ b/alternatives/leaf/index.html @@ -5,7 +5,7 @@ - + LEAF :: Outcome documentation @@ -598,108 +598,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/alternatives/outcome/index.html b/alternatives/outcome/index.html index 4d2767bfc6..5cad878803 100644 --- a/alternatives/outcome/index.html +++ b/alternatives/outcome/index.html @@ -5,7 +5,7 @@ - + Outcome (proposed std result) :: Outcome documentation @@ -598,108 +598,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/build/index.html b/build/index.html index 9075fb406b..231f431a05 100644 --- a/build/index.html +++ b/build/index.html @@ -5,7 +5,7 @@ - + Build and install :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/assignment/index.html b/categories/assignment/index.html index 3cff38fd77..f22e5b167e 100644 --- a/categories/assignment/index.html +++ b/categories/assignment/index.html @@ -5,7 +5,7 @@ - + Assignment :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/comparisons/index.html b/categories/comparisons/index.html index 37a991a37a..3314c1b5dc 100644 --- a/categories/comparisons/index.html +++ b/categories/comparisons/index.html @@ -5,7 +5,7 @@ - + Comparisons :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/comparisons/page/2/index.html b/categories/comparisons/page/2/index.html index 6b7d356284..546a06dd05 100644 --- a/categories/comparisons/page/2/index.html +++ b/categories/comparisons/page/2/index.html @@ -5,7 +5,7 @@ - + Comparisons :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/constructors/index.html b/categories/constructors/index.html index 47ebd59786..45500f41b2 100644 --- a/categories/constructors/index.html +++ b/categories/constructors/index.html @@ -5,7 +5,7 @@ - + Constructors :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/constructors/page/2/index.html b/categories/constructors/page/2/index.html index c963686635..ce51fce44d 100644 --- a/categories/constructors/page/2/index.html +++ b/categories/constructors/page/2/index.html @@ -5,7 +5,7 @@ - + Constructors :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/constructors/page/3/index.html b/categories/constructors/page/3/index.html index 9cb2e66e6c..925632a6b9 100644 --- a/categories/constructors/page/3/index.html +++ b/categories/constructors/page/3/index.html @@ -5,7 +5,7 @@ - + Constructors :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/constructors/page/4/index.html b/categories/constructors/page/4/index.html index 96e75a1191..ff83eb7f9e 100644 --- a/categories/constructors/page/4/index.html +++ b/categories/constructors/page/4/index.html @@ -5,7 +5,7 @@ - + Constructors :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/constructors/page/5/index.html b/categories/constructors/page/5/index.html index 1c26335d7c..c435932f12 100644 --- a/categories/constructors/page/5/index.html +++ b/categories/constructors/page/5/index.html @@ -5,7 +5,7 @@ - + Constructors :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/constructors/page/6/index.html b/categories/constructors/page/6/index.html index 69ae1958ef..7c040f1bcc 100644 --- a/categories/constructors/page/6/index.html +++ b/categories/constructors/page/6/index.html @@ -5,7 +5,7 @@ - + Constructors :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/constructors/page/7/index.html b/categories/constructors/page/7/index.html index 778f98d4b3..30c7515ce3 100644 --- a/categories/constructors/page/7/index.html +++ b/categories/constructors/page/7/index.html @@ -5,7 +5,7 @@ - + Constructors :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/converting-constructors/index.html b/categories/converting-constructors/index.html index 98363462c5..bb2a14ac95 100644 --- a/categories/converting-constructors/index.html +++ b/categories/converting-constructors/index.html @@ -5,7 +5,7 @@ - + Converting Constructors :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/converting-constructors/page/2/index.html b/categories/converting-constructors/page/2/index.html index d7c0fb9bc1..1f9ab732f2 100644 --- a/categories/converting-constructors/page/2/index.html +++ b/categories/converting-constructors/page/2/index.html @@ -5,7 +5,7 @@ - + Converting Constructors :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/converting-constructors/page/3/index.html b/categories/converting-constructors/page/3/index.html index fc37390685..d392ecc325 100644 --- a/categories/converting-constructors/page/3/index.html +++ b/categories/converting-constructors/page/3/index.html @@ -5,7 +5,7 @@ - + Converting Constructors :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/copy-assignment/index.html b/categories/copy-assignment/index.html index f37e20d8fc..d54c1d9624 100644 --- a/categories/copy-assignment/index.html +++ b/categories/copy-assignment/index.html @@ -5,7 +5,7 @@ - + Copy Assignment :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/copy-constructors/index.html b/categories/copy-constructors/index.html index 0f3213a419..52158d5897 100644 --- a/categories/copy-constructors/index.html +++ b/categories/copy-constructors/index.html @@ -5,7 +5,7 @@ - + Copy Constructors :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/default-constructors/index.html b/categories/default-constructors/index.html index 4f2196a317..54a594d806 100644 --- a/categories/default-constructors/index.html +++ b/categories/default-constructors/index.html @@ -5,7 +5,7 @@ - + Default Constructors :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/destructors/index.html b/categories/destructors/index.html index 1c738416e3..38e1212efd 100644 --- a/categories/destructors/index.html +++ b/categories/destructors/index.html @@ -5,7 +5,7 @@ - + Destructors :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/disabling-constructors/index.html b/categories/disabling-constructors/index.html index 1f10b410f1..cfdf1c1d9a 100644 --- a/categories/disabling-constructors/index.html +++ b/categories/disabling-constructors/index.html @@ -5,7 +5,7 @@ - + Disabling Constructors :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/explicit-constructors/index.html b/categories/explicit-constructors/index.html index 1a2639f951..b1bf6cde13 100644 --- a/categories/explicit-constructors/index.html +++ b/categories/explicit-constructors/index.html @@ -5,7 +5,7 @@ - + Explicit Constructors :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/explicit-constructors/page/2/index.html b/categories/explicit-constructors/page/2/index.html index f554c1693b..295151fb92 100644 --- a/categories/explicit-constructors/page/2/index.html +++ b/categories/explicit-constructors/page/2/index.html @@ -5,7 +5,7 @@ - + Explicit Constructors :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/explicit-constructors/page/3/index.html b/categories/explicit-constructors/page/3/index.html index f40cfab802..d729a3f635 100644 --- a/categories/explicit-constructors/page/3/index.html +++ b/categories/explicit-constructors/page/3/index.html @@ -5,7 +5,7 @@ - + Explicit Constructors :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/implicit-constructors/index.html b/categories/implicit-constructors/index.html index 5ada60a14b..aa61d58a2b 100644 --- a/categories/implicit-constructors/index.html +++ b/categories/implicit-constructors/index.html @@ -5,7 +5,7 @@ - + Implicit Constructors :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/implicit-constructors/page/2/index.html b/categories/implicit-constructors/page/2/index.html index d238c78a39..ac4d7c0f29 100644 --- a/categories/implicit-constructors/page/2/index.html +++ b/categories/implicit-constructors/page/2/index.html @@ -5,7 +5,7 @@ - + Implicit Constructors :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/implicit-constructors/page/3/index.html b/categories/implicit-constructors/page/3/index.html index a0ee1f437e..92ac61c473 100644 --- a/categories/implicit-constructors/page/3/index.html +++ b/categories/implicit-constructors/page/3/index.html @@ -5,7 +5,7 @@ - + Implicit Constructors :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/implicit-constructors/page/4/index.html b/categories/implicit-constructors/page/4/index.html index 98a4de59f7..fbb8cc54f3 100644 --- a/categories/implicit-constructors/page/4/index.html +++ b/categories/implicit-constructors/page/4/index.html @@ -5,7 +5,7 @@ - + Implicit Constructors :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/index.html b/categories/index.html index 64667c173f..d757445b51 100644 --- a/categories/index.html +++ b/categories/index.html @@ -5,7 +5,7 @@ - + Categories :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/inplace-constructors/index.html b/categories/inplace-constructors/index.html index bac812ec7e..6c8e4c0f8e 100644 --- a/categories/inplace-constructors/index.html +++ b/categories/inplace-constructors/index.html @@ -5,7 +5,7 @@ - + Inplace Constructors :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/inplace-constructors/page/2/index.html b/categories/inplace-constructors/page/2/index.html index e2e8b632a0..7b2209be24 100644 --- a/categories/inplace-constructors/page/2/index.html +++ b/categories/inplace-constructors/page/2/index.html @@ -5,7 +5,7 @@ - + Inplace Constructors :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/modifiers/index.html b/categories/modifiers/index.html index c3f7ad7157..5953b0787e 100644 --- a/categories/modifiers/index.html +++ b/categories/modifiers/index.html @@ -5,7 +5,7 @@ - + Modifiers :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/move-assignment/index.html b/categories/move-assignment/index.html index c7d0d5bb23..7baa272d4b 100644 --- a/categories/move-assignment/index.html +++ b/categories/move-assignment/index.html @@ -5,7 +5,7 @@ - + Move Assignment :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/move-constructors/index.html b/categories/move-constructors/index.html index ad945826c3..f26f57576d 100644 --- a/categories/move-constructors/index.html +++ b/categories/move-constructors/index.html @@ -5,7 +5,7 @@ - + Move Constructors :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/observer-policies/index.html b/categories/observer-policies/index.html index 0d7eee57c5..065beedbbd 100644 --- a/categories/observer-policies/index.html +++ b/categories/observer-policies/index.html @@ -5,7 +5,7 @@ - + Observer Policies :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/observer-policies/page/2/index.html b/categories/observer-policies/page/2/index.html index 61be19a912..4b3c8d01b8 100644 --- a/categories/observer-policies/page/2/index.html +++ b/categories/observer-policies/page/2/index.html @@ -5,7 +5,7 @@ - + Observer Policies :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/observers/index.html b/categories/observers/index.html index 9fea70eff8..2ecee812e0 100644 --- a/categories/observers/index.html +++ b/categories/observers/index.html @@ -5,7 +5,7 @@ - + Observers :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/observers/page/2/index.html b/categories/observers/page/2/index.html index def06660a9..a22001abd7 100644 --- a/categories/observers/page/2/index.html +++ b/categories/observers/page/2/index.html @@ -5,7 +5,7 @@ - + Observers :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/observers/page/3/index.html b/categories/observers/page/3/index.html index 9ff0180699..2462e3b84f 100644 --- a/categories/observers/page/3/index.html +++ b/categories/observers/page/3/index.html @@ -5,7 +5,7 @@ - + Observers :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/observers/page/4/index.html b/categories/observers/page/4/index.html index 3bf80e06ab..32936defb8 100644 --- a/categories/observers/page/4/index.html +++ b/categories/observers/page/4/index.html @@ -5,7 +5,7 @@ - + Observers :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/observers/page/5/index.html b/categories/observers/page/5/index.html index e96a5a320f..681eb1b719 100644 --- a/categories/observers/page/5/index.html +++ b/categories/observers/page/5/index.html @@ -5,7 +5,7 @@ - + Observers :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/observers/page/6/index.html b/categories/observers/page/6/index.html index 818f46c35b..e8ded13f5e 100644 --- a/categories/observers/page/6/index.html +++ b/categories/observers/page/6/index.html @@ -5,7 +5,7 @@ - + Observers :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/observers/page/7/index.html b/categories/observers/page/7/index.html index b0cd487bb3..dccbef9963 100644 --- a/categories/observers/page/7/index.html +++ b/categories/observers/page/7/index.html @@ -5,7 +5,7 @@ - + Observers :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/operators/index.html b/categories/operators/index.html index 0cf3d1f25b..26c4c3bcd7 100644 --- a/categories/operators/index.html +++ b/categories/operators/index.html @@ -5,7 +5,7 @@ - + Operators :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/page/2/index.html b/categories/page/2/index.html index 6d11be9f07..763489e57b 100644 --- a/categories/page/2/index.html +++ b/categories/page/2/index.html @@ -5,7 +5,7 @@ - + Categories :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/special/index.html b/categories/special/index.html index 19d3cfa306..e5bbcd3a5c 100644 --- a/categories/special/index.html +++ b/categories/special/index.html @@ -5,7 +5,7 @@ - + Special :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/tagged-constructors/index.html b/categories/tagged-constructors/index.html index ef334ff6bb..be70a97ead 100644 --- a/categories/tagged-constructors/index.html +++ b/categories/tagged-constructors/index.html @@ -5,7 +5,7 @@ - + Tagged Constructors :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/categories/tagged-constructors/page/2/index.html b/categories/tagged-constructors/page/2/index.html index b3ab1536ec..5df983f0ab 100644 --- a/categories/tagged-constructors/page/2/index.html +++ b/categories/tagged-constructors/page/2/index.html @@ -5,7 +5,7 @@ - + Tagged Constructors :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/changelog/index.html b/changelog/index.html index ddc311fec2..6b266a79ab 100644 --- a/changelog/index.html +++ b/changelog/index.html @@ -5,7 +5,7 @@ - + Changelog :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • @@ -2846,10 +2891,39 @@

    Changelog


    -

    v2.2.10 ? (Boost 1.86) [release]

    +

    v2.2.11 ? (Boost 1.87) [release]

    Enhancements:

    + + +

    It turns out there is more demand than expected for a more functional Result from within C, +so this release adds the power to create Results in success and two types of failure, semantic +comparison of Results, and printing of Result messages. You can also wrap a C enum into a +quick status code from enum, allowing easy custom C error coding from 100% within C.

    + +

    The documentation for the C support has been updated +to reflect the new facilities.

    + +

    Bug fixes:

    + + + +
    + +

    v2.2.10 14th August 2024 (Boost 1.86) [release]

    + +

    Enhancements:

    +
  • @@ -2807,17 +2852,22 @@ + - + Worked example: Custom domain (the short way) + - - - - + +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • @@ -2806,10 +2851,13 @@ + - + Worked example: Custom domain (the short way) + diff --git a/experimental/index.html b/experimental/index.html index 59f080a36f..abd7176762 100644 --- a/experimental/index.html +++ b/experimental/index.html @@ -5,7 +5,7 @@ - + Experimental :: Outcome documentation @@ -598,108 +598,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • @@ -2806,10 +2851,13 @@ + - + Worked example: Custom domain (the short way) + diff --git a/experimental/map/index.html b/experimental/map/index.html index 736a77724a..2b0232a974 100644 --- a/experimental/map/index.html +++ b/experimental/map/index.html @@ -5,7 +5,7 @@ - + Approximate map between error code designs :: Outcome documentation @@ -598,108 +598,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • @@ -2806,10 +2851,13 @@ + - + Worked example: Custom domain (the short way) + diff --git a/experimental/outcome/index.html b/experimental/outcome/index.html index c62c88c2c9..a389a4e6ba 100644 --- a/experimental/outcome/index.html +++ b/experimental/outcome/index.html @@ -5,7 +5,7 @@ - + Tying it all together :: Outcome documentation @@ -598,108 +598,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • @@ -2806,10 +2851,13 @@ + - + Worked example: Custom domain (the short way) + @@ -2935,8 +2983,8 @@

    Conclusion

    + +
    @@ -2951,7 +2999,7 @@

    Conclusion

    - Last update on 05/02/2019 + Last update on 16/07/2024
    diff --git a/experimental/status_result/index.html b/experimental/status_result/index.html index aa6eb93395..68753efa47 100644 --- a/experimental/status_result/index.html +++ b/experimental/status_result/index.html @@ -5,7 +5,7 @@ - + `status_result` and `status_outcome` :: Outcome documentation @@ -598,108 +598,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • @@ -2806,10 +2851,13 @@ + - + Worked example: Custom domain (the short way) + @@ -2910,7 +2958,7 @@

    status_result and status_outcome

    +
    diff --git a/experimental/worked-example-long/constructor/index.html b/experimental/worked-example-long/constructor/index.html index 7b32801d8a..c5b6ecc065 100644 --- a/experimental/worked-example-long/constructor/index.html +++ b/experimental/worked-example-long/constructor/index.html @@ -5,7 +5,7 @@ - + The constructor :: Outcome documentation diff --git a/experimental/worked-example-long/implicit_conversion/index.html b/experimental/worked-example-long/implicit_conversion/index.html index c64dccd179..665ef0940f 100644 --- a/experimental/worked-example-long/implicit_conversion/index.html +++ b/experimental/worked-example-long/implicit_conversion/index.html @@ -5,7 +5,7 @@ - + Implicit conversion :: Outcome documentation diff --git a/experimental/worked-example-long/index.html b/experimental/worked-example-long/index.html index 56273cb954..a74e936db7 100644 --- a/experimental/worked-example-long/index.html +++ b/experimental/worked-example-long/index.html @@ -5,7 +5,7 @@ - + Worked example: Custom domain (the long way) :: Outcome documentation diff --git a/experimental/worked-example-long/message/index.html b/experimental/worked-example-long/message/index.html index e6ce63b022..c89555b049 100644 --- a/experimental/worked-example-long/message/index.html +++ b/experimental/worked-example-long/message/index.html @@ -5,7 +5,7 @@ - + Redefining `message()` :: Outcome documentation diff --git a/experimental/worked-example-long/preamble/index.html b/experimental/worked-example-long/preamble/index.html index b09904eab6..be3eab2a01 100644 --- a/experimental/worked-example-long/preamble/index.html +++ b/experimental/worked-example-long/preamble/index.html @@ -5,7 +5,7 @@ - + Define a custom code domain :: Outcome documentation diff --git a/experimental/worked-example-long/source/index.html b/experimental/worked-example-long/source/index.html index ee35a4a19d..56e79c58d4 100644 --- a/experimental/worked-example-long/source/index.html +++ b/experimental/worked-example-long/source/index.html @@ -5,7 +5,7 @@ - + Constexpr domain source :: Outcome documentation @@ -2406,10 +2406,94 @@ Aliases
  • @@ -2807,18 +2852,15 @@ + - - - - - - - + Worked example: Custom domain (the short way) + - + @@ -2855,41 +2897,72 @@ -

    Worked example: Custom domain

    +

    Worked example: Custom domain (the short way)

    +

    The section after this one will take the long way through defining a custom domain +which sometimes is necessary if you have particularly bespoke requirements. +If however you just want to wrap a custom enum type of yours into its +own custom code domain, the boilerplate can be automated away +by filling in a few simple fields like this:

    +
    // My custom enum type
    +enum class custom_failure
    +{
    +  not_found,
    +  bad_argument
    +};
     
    -

    Here follows a worked example of use of Experimental Outcome. It presents -the same sample program I sent to the San Diego 2018 WG21 standards meeting -after I was asked by the committee to demonstrate how P1095 implements P0709 -in a working code example they could study and discuss.

    - -

    We will walk through this worked example, step by step, explaining how each -part works in detail. This will help you implement your own code based on -Experimental Outcome.

    +// Tell `status_code` to stamp out a custom code domain for this enum type +SYSTEM_ERROR2_NAMESPACE_BEGIN +template <> struct quick_status_code_from_enum<custom_failure> : quick_status_code_from_enum_defaults<custom_failure> +{ + // Text name of the enum + static constexpr const auto domain_name = "My custom failure"; + // Unique UUID for the enum. PLEASE use https://www.random.org/cgi-bin/randbyte?nbytes=16&format=h + static constexpr const auto domain_uuid = "{be201f65-3962-dd0e-1266-a72e63776a42}"; + // Map of each enum value to its text string, and list of semantically equivalent errc's + static const std::initializer_list<mapping> &value_mappings() + { + static const std::initializer_list<mapping> v = { + // Format is: { enum value, "string representation", { list of errc mappings ... } } + {custom_failure::not_found, "item not found", {errc::no_such_file_or_directory}}, // + {custom_failure::bad_argument, "invoked wrong", {errc::invalid_argument}}, // + }; + return v; + } + // Completely optional definition of mixin for the status code synthesised from `Enum`. It can be omitted. + template <class Base> struct mixin : Base + { + using Base::Base; + constexpr int custom_method() const { return 42; } + }; +}; +SYSTEM_ERROR2_NAMESPACE_END +
    View this code on Github
    -

    You may find it useful to open now in a separate browser tab the reference API -documentation for proposed <system_error2> at https://ned14.github.io/status-code/ -(scroll half way down). The references in the comments to P1028 are to -P1028 SG14 status_code and standard error object for P0709 Zero-overhead -deterministic exceptions, which is the WG21 proposal -paper for potential <system_error2>.

    -

    Goal of this section

    +

    Here we supply the bare minimum requirements for a status code domain:

    -

    We are going to define a simple custom code domain which defines that -the status code’s payload will consist of a POSIX error code, and the -__FILE__ and __LINE__ where the failure occurred. This custom status -code will have an implicit conversion to type erased error defined, which dynamically -allocates memory for the original status code, and outputs an error -which manages that dynamic allocation, indirecting all queries etc -to the erased custom status code type such that the error instance -quacks as if just like the original. This demonstrates that error could -just as equally convey a std::exception_ptr, for example, or indeed -manage the lifetime of any pointer.

    +
      +
    1. The name in text, so it can be printed.
    2. +
    3. The unique UUID to identify when multiple copies of the domain are the same. +PLEASE use https://www.random.org/cgi-bin/randbyte?nbytes=16&format=h to generate +this, do not twiddle a few bits.
    4. +
    5. For each enum value, its printable text and a sequence of errc:: enumerations +which you think it is semantically equivalent to i.e. its mapping onto generic_code +which is how status code defines the common mapping between status codes. If you later compare the +status code to one of those values (or to another status code which also provides +a mapping), if the generic codes are equivalent then the comparison will return true. +This means code like if(sc == errc::no_such_file_or_directory) ... would match +all custom error codes which mean ‘something was not found’.
    6. +
    7. OPTIONAL: if you would like the custom status code type generated by this +to have additional member functions or additional payload, you can define a mixin +here to inject either data or functions or both. If you omit this, nothing gets +injected.
    8. +
    @@ -2897,8 +2970,8 @@

    Goal of this section

    + +
    @@ -2913,7 +2986,7 @@

    Goal of this section

    - Last update on 26/01/2019 + Last update on 16/07/2024
    diff --git a/experimental/worked-example/index.xml b/experimental/worked-example/index.xml index 5a7e9e743a..e51bbceca6 100644 --- a/experimental/worked-example/index.xml +++ b/experimental/worked-example/index.xml @@ -1,85 +1,23 @@ - Worked example: Custom domain on Outcome documentation + Worked example: Custom domain (the short way) on Outcome documentation https://ned14.github.io/outcome/experimental/worked-example/ - Recent content in Worked example: Custom domain on Outcome documentation + Recent content in Worked example: Custom domain (the short way) on Outcome documentation Hugo -- gohugo.io - Sat, 26 Jan 2019 23:38:56 +0000 + Tue, 16 Jul 2024 21:33:35 +0100 - Define a custom code domain - https://ned14.github.io/outcome/experimental/worked-example/preamble/ + Implicit construction + https://ned14.github.io/outcome/experimental/worked-example/implicit-construction/ Mon, 01 Jan 0001 00:00:00 +0000 - https://ned14.github.io/outcome/experimental/worked-example/preamble/ - Firstly let&rsquo;s alias the experimental Outcome namespace into something less tedious to type, declare our custom status code type, and get started on defining the custom status code domain implementation. -namespace outcome_e = OUTCOME_V2_NAMESPACE::experimental; // To define a `file_io_error` which participates in the P1028 world // of `std::error`, we must first declare, then define, a custom code // domain which extends `posix_code` (the std error coding for POSIX // failures). The following is fairly standard boilerplate for defining // a custom code domain. - - - - The payload - https://ned14.github.io/outcome/experimental/worked-example/value_type/ - Mon, 01 Jan 0001 00:00:00 +0000 - - https://ned14.github.io/outcome/experimental/worked-example/value_type/ - We define the code domain&rsquo;s value_type &ndash; the payload to be transported by status codes using this code domain &ndash; to be a POSIX errno value, an integer line number and a const char pointer. -public: // This is the value type for `file_io_error`. We add line number and source file path. struct value_type { typename outcome_e::posix_code::value_type errcode; // from POSIX, as we inherit from _posix_code_domain // Our additional payload int lineno; // from __LINE__ const char *file; // from __FILE__ // Could also place a backtrace of void *[16] here . - - - - The constructor - https://ned14.github.io/outcome/experimental/worked-example/constructor/ - Mon, 01 Jan 0001 00:00:00 +0000 - - https://ned14.github.io/outcome/experimental/worked-example/constructor/ - Code domains are 100% constexpr to construct and destruct, as are status codes. This enables the compiler to 100% instantiate both only in its mind, and to emit zero code and thus zero overhead. -Unfortunately it also means that it must be possible for each domain to be instantiated an infinite number of times, and being 100% in constexpr, any instances never have a unique address in memory either. Thus we cannot compare domains for equivalence using their address in memory, as std::error_category does. - - - - String refs - https://ned14.github.io/outcome/experimental/worked-example/string_ref/ - Mon, 01 Jan 0001 00:00:00 +0000 - - https://ned14.github.io/outcome/experimental/worked-example/string_ref/ - &lt;system_error2&gt; does not use std::string to return possibly statically or dynamically allocated strings, and thus avoids dragging in a lot of the standard library which impacts build times. -Instead status code domains have a string_ref, which has a polymorphic implementation which may or may not manage a dynamic memory allocation using an atomic reference counter. Due to this polymorphism, you don&rsquo;t need to worry which implementation is actually in use under the bonnet when you pass around string_ref instances. - - - - Redefining `message()` - https://ned14.github.io/outcome/experimental/worked-example/message/ - Mon, 01 Jan 0001 00:00:00 +0000 - - https://ned14.github.io/outcome/experimental/worked-example/message/ - You may remember that our custom _file_io_error_domain inherits from outcome_e::posix_code::domain_type, and thus does not have to implement the many pure virtual functions required by outcome_e::status_code_domain. -What we do need to do is reimplement _do_message() to append the file and line information to the POSIX error description string returned by outcome_e::posix_code::domain_type. This causes the status code&rsquo;s .message() observer to return a string with the extra payload information represented in text. -// Return a string describing a specific code. - - - - Constexpr domain source - https://ned14.github.io/outcome/experimental/worked-example/source/ - Mon, 01 Jan 0001 00:00:00 +0000 - - https://ned14.github.io/outcome/experimental/worked-example/source/ - Back in The constructor, we declared but did not implement a .get() function which returns a constexpr static instance of the domain. We implement this now: -// 100% constexpr instantiation constexpr _file_io_error_domain file_io_error_domain; inline constexpr const _file_io_error_domain &amp;_file_io_error_domain::get() { return file_io_error_domain; } View this code on Github As this is 100% constexpr, it can be (and is under optimisation) implemented entirely in the mind of the compiler with no run time representation. - - - - Implicit conversion - https://ned14.github.io/outcome/experimental/worked-example/implicit_conversion/ - Mon, 01 Jan 0001 00:00:00 +0000 - - https://ned14.github.io/outcome/experimental/worked-example/implicit_conversion/ - Back in The payload, we mentioned that there was no default implicit conversion of file_io_error (status_code&lt;_file_io_error_domain&gt;) to error, as error is too small to hold _file_io_error_domain::value_type. -We can tell the framework about available implicit conversions by defining an ADL discovered free function make_status_code() which takes our custom status code as input, and returns an error: -// Now tell `error` how it can implicitly construct from `file_io_error`. // This is done by us defining a free function called `make_status_code()` // which is discovered using ADL. + https://ned14.github.io/outcome/experimental/worked-example/implicit-construction/ + The preceding code had the compiler stamp out a custom status code domain for a user supplied enum. You now get the following types: +// This is the status code generated for your custom enum type. It will implicitly construct from // values of enum custom_failure. using custom_failure_code = SYSTEM_ERROR2_NAMESPACE::quick_status_code_from_enum_code&lt;custom_failure&gt;; namespace outcome_e = OUTCOME_V2_NAMESPACE::experimental; // You don&#39;t usually need to use the status code type explicitly, because this &#34;just works&#34;: outcome_e::status_result&lt;int&gt; positive_only(int x) { if(x &lt; 0) { // Outcome&#39;s result sees that status_code will implicitly construct from this enum, // and it returns an errored result return custom_failure::bad_argument; } return x; } // Semantic comparisons work bool test(int x) { if(auto r = positive_only(x); ! diff --git a/faq/index.html b/faq/index.html index e643e352f7..a5fc677bd4 100644 --- a/faq/index.html +++ b/faq/index.html @@ -5,7 +5,7 @@ - + Frequently asked questions :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/history/index.html b/history/index.html index b831df6848..2847dd129b 100644 --- a/history/index.html +++ b/history/index.html @@ -5,7 +5,7 @@ - + History :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • diff --git a/index.html b/index.html index c4488f3a81..320d7b93fa 100644 --- a/index.html +++ b/index.html @@ -6,7 +6,7 @@ - + Home :: Outcome documentation @@ -598,108 +598,153 @@ status_result and status_outcome +
  • +
  • +
    + + Tying it all together + +
  • - Worked example: Custom domain + Worked example: Custom domain (the short way) +
    + +
  • +
  • +
    + Worked example: Custom domain (the long way)
  • -
  • +
  • +
    + Using Outcome from C code +
    + +
  • +
  • @@ -2876,6 +2921,8 @@

    Outcome 2.2 library

  • there is an external requirement (such as a company-wide policy) that failure handling paths are explicitly indicated in the code.

  • where interoperation with C code, without having to resort to C++ exception wrapper shims, is important.

  • + +
  • where your mostly C code base needs exception-like error handling, and the subset of Outcome’s functionality available in C is sufficient for your needs.

  • Outcome addresses failure handling through returning a special type from functions, which is able to store either a successfully computed value (or void), or the information about failure. Outcome also comes with a set of idioms for dealing with such types.

    @@ -2891,7 +2938,7 @@

    Outcome 2.2 library

    and generator<T, Executor = void> awaitables which work for any user type.

    -

    Sample usage

    +

    Sample usage (C++)

    The main workhorse in the Outcome library is result<T>: it represents either a successfully computed value of type T, or a std::error_code/boost::system::error_code2 representing the reason for failure. You use it in the function’s return type:

    @@ -2924,6 +2971,43 @@

    Sample usage

    OUTCOME_TRY is a control statement. If the returned result<T> object contains an error information, the enclosing function is immediately returned with result<U> containing the same failure information; otherwise an automatic object of type T is available in scope.

    +

    Sample usage (C)

    + +

    Equivalent to the C++ API: CXX_DECLARE_RESULT_SYSTEM(ident, T) declares the C type, thereafter CXX_RESULT_SYSTEM(ident) refers to it. You use it in the function’s return type:

    + +
    CXX_DECLARE_RESULT_SYSTEM(result_string, const char *)
    +
    +CXX_RESULT_SYSTEM(result_string) data_from_file(const char *path);
    +
    View this code on Github
    + + +

    It is possible to inspect the state manually:

    + +
      CXX_RESULT_SYSTEM(result_string) rslt = data_from_file("config.cfg");
    +  if(CXX_RESULT_HAS_VALUE(rslt))
    +    use_string(rslt.value);  // returns string
    +  else
    +    fprintf(stderr, "%s\n", outcome_status_code_message(&rslt.error));
    +
    View this code on Github
    + + +

    Or, if this function is called in another function that also returns CXX_RESULT_SYSTEM(ident), you can use a dedicated control statement:

    + +
    CXX_DECLARE_RESULT_SYSTEM(result_int, int)
    +
    +CXX_RESULT_SYSTEM(result_int) process(const char *content);
    +
    +CXX_RESULT_SYSTEM(result_int) int_from_file(const char *path)
    +{
    +  CXX_RESULT_SYSTEM_TRY(const char *str, result_int, /* cleanup on fail */, data_from_file(path));
    +  // if control gets here data_from_file() has succeeded
    +  return process(str);  // decltype(str) == string
    +}
    +
    View this code on Github
    + + +

    The C Result is guaranteed to be layout identical to its C++ equivalent. Convenience conversion functions are available, but you can reinterpret cast too.

    +

    This library joined the Boost C++ libraries in the 1.70 release (Spring 2019). It can be grafted into much older Boost releases if desired.

    @@ -2961,7 +3045,7 @@

    Sample usage

    - Last update on 18/03/2022 + Last update on 16/07/2024
    diff --git a/index.json b/index.json index efddbc2699..f788fcf78a 100644 --- a/index.json +++ b/index.json @@ -32,7 +32,7 @@ "title": "The main advantages", "tags": [], "description": "", - "content": "The main advantages of choosing \u0026lt;outcome/experimental\u0026gt; over default Outcome:\n Codegen is tighter and less verbose1, sometimes remarkably so.\n Build time impact is markedly lower, barely above the inclusion of naked \u0026lt;basic_result.hpp\u0026gt;, as the STL allocator machinery and std::string et al is not dragged into inclusion by including \u0026lt;system_error\u0026gt;. Note that \u0026lt;outcome/experimental/status_outcome.hpp\u0026gt; bring in \u0026lt;exception\u0026gt;, however \u0026lt;outcome/experimental/status_result.hpp\u0026gt; brings in no extra system headers.\n More discipline is imposed on your use of Outcome, leading to less ambiguous code which is easier to optimise by the compiler, lower cost to maintain, and lower cognitive load to audit code based on experimental Outcome for correctness.\n Code written to \u0026lt;outcome/experimental\u0026gt; can be fairly easily dual targeted, with just a few switching type aliases, to default Outcome. This author has several Outcome-based libraries with identical source code which can target either configuration of Outcome. The experimental Outcome build regularly beats the default Outcome build in benchmarks by 2-3%, and the dual target source code, being written to tighter discipline, is faster and more deterministic in the default target than it was before the (non-trivial) port to \u0026lt;outcome/experimental\u0026gt;.\n If you are building a codebase on top of Outcome expecting long term maintenance, the author\u0026rsquo;s personal recommendation is that you design, write, test and optimise it for \u0026lt;outcome/experimental\u0026gt;. What you ship to your customers ought to be targeted at default Outcome however, so employ type aliases and macros as appropriate to switch the build configuration for production releases. This is what the Outcome author does himself, to date with great success, despite the fundamental architectural differences between \u0026lt;system_error\u0026gt; and proposed \u0026lt;system_error2\u0026gt;.\n Boost.System\u0026rsquo;s error_code has incorporated some of the design improvements of experimental status_code, and produces codegen somewhere in between experimental status_code and std::error_code. [return] " + "content": "The main advantages of choosing \u0026lt;outcome/experimental\u0026gt; over default Outcome:\n Codegen is tighter and less verbose1, sometimes remarkably so.\n Build time impact is markedly lower, barely above the inclusion of naked \u0026lt;basic_result.hpp\u0026gt;, as the STL allocator machinery and std::string et al is not dragged into inclusion by including \u0026lt;system_error\u0026gt;. Note that \u0026lt;outcome/experimental/status_outcome.hpp\u0026gt; bring in \u0026lt;exception\u0026gt;, however \u0026lt;outcome/experimental/status_result.hpp\u0026gt; brings in no extra system headers.\n More discipline is imposed on your use of Outcome, leading to less ambiguous code which is easier to optimise by the compiler, lower cost to maintain, and lower cognitive load to audit code based on experimental Outcome for correctness.\n Code written to \u0026lt;outcome/experimental\u0026gt; can be fairly easily dual targeted, with just a few switching type aliases, to default Outcome. This author has several Outcome-based libraries with identical source code which can target either configuration of Outcome. The experimental Outcome build regularly beats the default Outcome build in benchmarks by 2-3%, and the dual target source code, being written to tighter discipline, is faster and more deterministic in the default target than it was before the (non-trivial) port to \u0026lt;outcome/experimental\u0026gt;.\n If you want \u0026lsquo;official\u0026rsquo; C support, experimental Outcome is able to provide that in a way not possible for default Outcome which cannot make sufficiently strong C compatibility assumptions about std::error_code.\n If you are building a codebase on top of Outcome expecting long term maintenance, the author\u0026rsquo;s personal recommendation is that you design, write, test and optimise it for \u0026lt;outcome/experimental\u0026gt;. What you ship to your customers ought to be targeted at default Outcome however, so employ type aliases and macros as appropriate to switch the build configuration for production releases. This is what the Outcome author does himself, to date with great success, despite the fundamental architectural differences between \u0026lt;system_error\u0026gt; and proposed \u0026lt;system_error2\u0026gt;.\n Boost.System\u0026rsquo;s error_code has incorporated some of the design improvements of experimental status_code, and produces codegen somewhere in between experimental status_code and std::error_code. [return] " }, { "uri": "https://ned14.github.io/outcome/tutorial/advanced/interop/value-or-error/", @@ -76,6 +76,13 @@ "description": "", "content": "Much of the design of Boost.System (which went on to become \u0026lt;system_error\u0026gt;) has been retained in proposed \u0026lt;system_error2\u0026gt;, so an approximate map between \u0026lt;system_error2\u0026gt; and \u0026lt;system_error\u0026gt; and Boost.System can be given:\n C++ 17 \u0026lt;system_error\u0026gt;Boost.SystemProposed \u0026lt;system_error2\u0026gt; std::errc boost::system::errc experimental::errc (almost identical) std::error_category boost::system::error_category experimental::status_code_domain std::generic_category boost::system::generic_category experimental::generic_code_domain std::system_category boost::system::system_category One of: experimental::posix_code_domain (POSIX systems) experimental::win32_code_domain (Microsoft Windows) experimental::nt_code_domain (Microsoft Windows) Note that there are more precanned code categories though they require additional header inclusions: com_code, getaddrinfo_code. std::error_condition boost::system::error_condition No equivalent (deliberately removed as hindsight proved it to be a design mistake leading to much confusing and hard to audit for correctness code) std::error_code boost::system::error_code One of: experimental::status_code\u0026lt;DomainType\u0026gt; const experimental::status_code\u0026lt;void\u0026gt; \u0026amp; experimental::status_code\u0026lt;erased\u0026lt;intptr_t\u0026gt;\u0026gt; (aliased to experimental::system_code) experimental::errored_status_code\u0026lt;DomainType\u0026gt; const experimental::errored_status_code\u0026lt;void\u0026gt; \u0026amp; experimental::errored_status_code\u0026lt;erased\u0026lt;intptr_t\u0026gt;\u0026gt; (aliased to experimental::error) The difference between status codes and errored status codes is that the latter are guaranteed to refer to a failure, whereas the former may refer to a success (including warnings and informationals). std::system_error boost::system::system_error One of: const experimental::status_error\u0026lt;void\u0026gt; \u0026amp; experimental::status_error\u0026lt;DomainType\u0026gt; As is obvious from the above, in \u0026lt;system_error2\u0026gt; one must be much more specific and accurate with respect to intent and specification and desired semantics than with \u0026lt;system_error\u0026gt;. Much ambiguity and incorrectness which flies silently in \u0026lt;system_error\u0026gt; will refuse to compile in \u0026lt;system_error2\u0026gt;.\n" }, +{ + "uri": "https://ned14.github.io/outcome/experimental/c-api/from-c/system_code/", + "title": "C system error results", + "tags": [], + "description": "Status code's `std::error` in C", + "content": "In v2.2.11, C Result support went from second tier to first tier status, and now you can create, query and manipulate a subset of Result types entirely from within C by including \u0026lt;outcome/experimental/result.h\u0026gt;.\nThe subset supported are those result\u0026lt;T, E\u0026gt; which are a status_result\u0026lt;T\u0026gt; i.e. the E is hardcoded to experimental::error which is the type erased runtime polymorphic holder for any errored status_code whose payload is not bigger than an intptr_t. This is the most useful subset of Outcome Experimental\u0026rsquo;s possible Result types, allowing arbitrary custom error coding schemes from any unknown source to work seamlessly with all others, including errors from the system or third party libraries.\nThe operations available to C are:\n CXX_DECLARE_RESULT_SYSTEM(ident, T) Declares to C a status_result type uniquely identified by ident. T is available at the member variable .value, and struct cxx_status_code_system is available at the member variable .error. If in C++, implements C extern functions for making successful and failure results of this type. If you call this from within C++, make SURE it is not within a extern \"C\" block! CXX_RESULT_SYSTEM(ident) A reference to a previously declared status_result type with unique ident. CXX_MAKE_RESULT_SYSTEM_SUCCESS(ident, expr) (needs C++ counterpart linked into final binary) This invokes the aforementioned extern function which creates a status_result with a successful value of type T. CXX_MAKE_RESULT_SYSTEM_FAILURE_POSIX(ident, expr) (needs C++ counterpart linked into final binary) This invokes the aforementioned extern function which creates a status_result with a failure of type posix_code representing a POSIX errno. CXX_MAKE_RESULT_SYSTEM_FAILURE_SYSTEM(ident, expr) (needs C++ counterpart linked into final binary) This invokes the aforementioned extern function which creates a status_result with a failure of type posix_code representing a POSIX errno if on POSIX; if on Windows then a failure of type win32_code representing a Win32 error code from a Windows API. CXX_RESULT_HAS_VALUE(r) Evaluates to 1 (true) if the input result has a value. CXX_RESULT_HAS_ERROR(r) Evaluates to 1 (true) if the input result has an error. CXX_RESULT_ERROR_IS_ERRNO(r) Evaluates to 1 (true) if the input result's error value is a code in the POSIX errno domain. CXX_RESULT_SYSTEM_TRY(expr) If the status_result returned by expr is errored, exit the current function returning the result. This obviously requires that the return type of the current function matches that of expr. CXX_RESULT_SYSTEM_TRY(cleanup, expr) Same as the above, but execute cleanup just before exiting the function if returning failure. CXX_RESULT_SYSTEM_TRY(var, cleanup, expr) Same as the above, but set var equal to the result's .value on success. CXX_RESULT_SYSTEM_TRY(var, ident, cleanup, expr) Same as the above, but use ident as the return type instead. This allows the return type of the calling function to differ from that of expr. CXX_DECLARE_RESULT_SYSTEM_FROM_ENUM(ident, enum_name, uuid, {enum mapping-sequence, ...}) This declares to C an extern function which creates a status_result from a C enum. If in C++, it implements a quick_status_code_from_enum for the C enum and the associated extern function, and you will need to supply uuid and the appropriate enum value mapping sequence as per the quick_status_code_from_enum documentation. CXX_MAKE_RESULT_SYSTEM_FROM_ENUM(ident, enum_name, expr) (needs C++ counterpart linked into final binary) This invokes the aforementioned extern function which creates a status_result from a C enum. The operations available to C++ are:\n CXX_TO_RESULT_SYSTEM_CODE(ident, status_code\u0026lt;T\u0026gt;) Returns a previously declared C Result from its matching C++ status_code. NOTE that the destructor of the C++ status code is NOT called. If this is important to your status code, it is 100% on you to ensure that your C Result reenters a C++ Result at the end of its lifetime. to_result(any C Result) This is an overloaded C++ free function which returns the C++ status_code\u0026lt;T\u0026gt; matching its input C Result. Using the above you can write C code using Outcome.Experimental\u0026rsquo;s Result type quite effectively. Let\u0026rsquo;s look at an example of use next.\n" +}, { "uri": "https://ned14.github.io/outcome/tutorial/essential/coroutines/try/", "title": "Coroutine TRY operation", @@ -84,7 +91,7 @@ "content": "As one cannot call statement return from within a Coroutine, the very first part of Outcome\u0026rsquo;s support for Coroutines is OUTCOME_CO_TRYV(expr)/OUTCOME_CO_TRY(expr) , which is literally the same as OUTCOME_TRY() except that co_return is called to return early instead of return.\neager\u0026lt;result\u0026lt;std::string\u0026gt;\u0026gt; to_string(int x) { if(x \u0026gt;= 0) { OUTCOME_CO_TRY(convert(x)); } co_return \u0026#34;out of range\u0026#34;; } " }, { - "uri": "https://ned14.github.io/outcome/experimental/worked-example/preamble/", + "uri": "https://ned14.github.io/outcome/experimental/worked-example-long/preamble/", "title": "Define a custom code domain", "tags": [], "description": "", @@ -104,6 +111,13 @@ "description": "Exceptions with their good and bad sides.", "content": " Exceptions are the default mechanism in C++ for reporting, propagating and processing the information about function failures. Their main advantage is the ability to describe the \u0026ldquo;success dependency\u0026rdquo; between functions: if you want to say that calling function g() depends on the successful execution of function f(), you just put g() below f() and that\u0026rsquo;s it:\nint a() { f(); g(); // don\u0026#39;t call g() and further if f() fails return h(); // don\u0026#39;t call h() if g() fails } In the C++ Standard terms this means that f() is sequenced before g(). This makes failure handling extremely easy: in a lot of cases you do not have to do anything.\nAlso, while next operations are being canceled, the exception object containing the information about the initial failure is kept on the side. When at some point the cancellation cascade is stopped by an exception handler, the exception object can be inspected. It can contain arbitrarily big amount of data about the failure reason, including the entire call stack.\nDownsides There are two kinds of overheads caused by the exception handling mechanism. The first is connected with storing the exceptions on the side. Stack unwinding works independently in each thread of execution; each thread can be potentially handling a number of exceptions (even though only one exception can be active in one thread). This requires being prepared for storing an arbitrary number of exceptions of arbitrary types per thread. Additional things like jump tables also need to be stored in the program binaries.\nSecond overhead is experienced when throwing an exception and trying to find the handler. Since nearly any function can throw an exception of any time, this is a dynamic memory allocation. The type of an exception is erased and a run-time type identification (RTTI) is required to asses the type of the active exception object. The worst case time required for matching exceptions against handlers cannot be easily predicted and therefore exceptions are not suitable for real-time or low-latency systems.\nAnother problem connected with exceptions is that while they are good for program flows with linear \u0026ldquo;success dependency\u0026rdquo;, they become inconvenient in situations where this success dependency does not occur. One such notable example is releasing acquired resources which needs to be performed even if previous operations have failed. Another example is when some function c() depends on the success of at least one of two functions a() and b() (which try, for instance, to store user data by two different means), another example is when implementing a strong exception safety guarantee we may need to apply some fallback actions when previous operations have failed. When failures are reported by exceptions, the semantics of canceling all subsequent operations is a hindrance rather than help; these situations require special and non-trivial idioms to be employed.\nFor these reasons in some projects using exceptions is forbidden. Compilers offer switches to disable exceptions altogether (they refuse to compile a throw, and turn already compiled throws into calls to std::abort()).\n" }, +{ + "uri": "https://ned14.github.io/outcome/experimental/worked-example/implicit-construction/", + "title": "Implicit construction", + "tags": [], + "description": "", + "content": "The preceding code had the compiler stamp out a custom status code domain for a user supplied enum. You now get the following types:\n// This is the status code generated for your custom enum type. It will implicitly construct from // values of enum custom_failure. using custom_failure_code = SYSTEM_ERROR2_NAMESPACE::quick_status_code_from_enum_code\u0026lt;custom_failure\u0026gt;; namespace outcome_e = OUTCOME_V2_NAMESPACE::experimental; // You don\u0026#39;t usually need to use the status code type explicitly, because this \u0026#34;just works\u0026#34;: outcome_e::status_result\u0026lt;int\u0026gt; positive_only(int x) { if(x \u0026lt; 0) { // Outcome\u0026#39;s result sees that status_code will implicitly construct from this enum, // and it returns an errored result return custom_failure::bad_argument; } return x; } // Semantic comparisons work bool test(int x) { if(auto r = positive_only(x); !r) { if(r.error() == outcome_e::errc::invalid_argument) { std::cerr \u0026lt;\u0026lt; \u0026#34;Positive numbers only!\u0026#34; \u0026lt;\u0026lt; std::endl; return false; } } return true; } View this code on Github As you can see, this is less work than plugging your custom enum into std::error_code. It also has C compatibility, and generates better codegen.\n" +}, { "uri": "https://ned14.github.io/outcome/tutorial/advanced/hooks/keeping_state/", "title": "Keeping state", @@ -111,13 +125,6 @@ "description": "", "content": "The first thing we are going to need is somewhere to store the stack backtrace. We could take the easier route and simply store it into an allocated block and keep the pointer as a custom payload in a result\u0026lt;T, std::pair\u0026lt;error_code, std::unique_ptr\u0026lt;stack_backtrace\u0026gt;\u0026gt;\u0026gt; (see previous section on Custom payloads). But let us assume that we care so deeply about bounded execution times that ever calling malloc is unacceptable.\nWe therefore are going to need some completely static and trivially typed storage perhaps kept per-thread to avoid the need to keep mutexes.\n/* Outcome\u0026#39;s hook mechanism works vis ADL, so we will need a custom namespace to ensure the hooks apply only to the types declared in this namespace only */ namespace error_code_extended { // The extra error information we will keep struct extended_error_info { std::array\u0026lt;void *, 16\u0026gt; backtrace; // The backtrace size_t items; // Items in backtrace array which are valid }; struct mythreadlocaldata_t { // Keep 16 slots of extended error info as a ringbuffer extended_error_info slots[16]; // The current oldest slot uint16_t current{0}; // Return the oldest slot extended_error_info \u0026amp;next() { return slots[(current++) % 16]; } // Retrieve a previously stored slot, detecting if it is stale extended_error_info *get(uint16_t idx) { // If the idx is stale, return not found if(idx - current \u0026gt;= 16) { return nullptr; } return slots + (idx % 16); } }; // Meyers\u0026#39; singleton returning a thread local data structure for this thread inline mythreadlocaldata_t \u0026amp;mythreadlocaldata() { static thread_local mythreadlocaldata_t v; return v; } } View this code on Github The extended error info is kept in a sixteen item long, thread local, ring buffer. We continuously increment the current index pointer which is a 16 bit value which will wrap after 65,535. This lets us detect an attempt to access recycled storage, and thus return item-not-found instead of the wrong extended error info.\n" }, -{ - "uri": "https://ned14.github.io/outcome/experimental/c-api/limitations/", - "title": "Limitations", - "tags": [], - "description": "", - "content": "C++ has excellent two-way compatibility with the C ABI, but there are some limitations you must observe to write C++ code which C code can call without marshalling at the ABI boundary:\n A C++ function may not throw exceptions if it is safe to call from C, and so should always be marked noexcept.\n A C++ function should be annotated with extern \u0026quot;C\u0026quot; to prevent its symbol being mangled, and thus give it the C rather than C++ ABI.\n You cannot use overloading in your extern \u0026quot;C\u0026quot; functions.\n You may only use types in your C++ function declaration for which these traits are both true:\n std::is_standard_layout_v\u0026lt;T\u0026gt; std::is_trivially_copyable_v\u0026lt;T\u0026gt; (Note that std::is_trivially_copyable_v\u0026lt;T\u0026gt; requires trivial destruction, but NOT trivial construction. This means that C++ can do non-trivial construction of otherwise trivial types)\n The above is what the standard officially requires for well defined C and C++ interop. However, all of the three major compilers MSVC, GCC and clang are considerably more relaxed. In those three major compilers, \u0026ldquo;almost-standard-layout\u0026rdquo; C++ types work fine in C.\n\u0026ldquo;Almost-standard-layout\u0026rdquo; C++ types have these requirements:\n No virtual functions or virtual base classes i.e. std::is_polymorphic_v\u0026lt;T\u0026gt; must be false. This is because the vptrs offset the proper front of the data layout in an unknowable way to C. Non-static data members of reference type appear to C as pointers. You must never supply from C to C++ a non-null pointer which is seen as a reference in C++. C++ inheritance is seen in C data layout as if the most derived class has nested variables of the inherited types at the top, in order of inheritance. Types with non-trivial destructors work fine so long as at least move construction and assignment is the same as copying bits like memcpy(). You just need to make sure instances of the type return to C++, and don\u0026rsquo;t get orphaned in C. This was referred to in previous pages in this section as \u0026ldquo;move relocating\u0026rdquo; types. Experimental Outcome\u0026rsquo;s support for being used from C does not meet the current strict requirements, and thus relies on the (very common) implementation defined behaviour just described (it is hoped that future C++ standards can relax the requirements to those just described).\nSpecifically, proposed status_code is an almost-standard-layout type, and thus while it can\u0026rsquo;t be returned from extern \u0026quot;C\u0026quot; functions as the compiler will complain, it is perfectly safe to return from C++ functions to C code on the three major compilers, as it is an \u0026ldquo;almost-standard-layout\u0026rdquo; C++ type if T is an \u0026ldquo;almost-standard-layout\u0026rdquo; C++ type.\n" -}, { "uri": "https://ned14.github.io/outcome/reference/macros/", "title": "Macros", @@ -223,6 +230,13 @@ "description": "", "content": "These are the predefined policies built into Outcome:\n\u0026nbsp;\nall_narrow If there is an observation of a value/error/exception which is not present, the program is put into a hard undefined behaviour situation. The compiler literally compiles no code for an invalid observation \u0026ndash; the CPU \u0026ldquo;runs off\u0026rdquo; into the unknown.\nAs bad as this may sound, it generates the most optimal code, and such hard UB is very tool-friendly for detection e.g. undefined behaviour sanitiser, valgrind memcheck, etc.\nIf you are considering choosing this policy, definitely read static void _ub(Impl \u0026amp;\u0026amp;) first.\nNote that unchecked\u0026lt;T, E = varies\u0026gt; aliases a basic_result with the all_narrow no-value policy.\n\u0026nbsp;\nterminate Observation of a missing value/error/exception causes a call to std::terminate().\nNote that configuring EC = void or EP = void causes default_policy to choose terminate as the no-value policy.\n\u0026nbsp;\nerror_code_throw_as_system_error\u0026lt;T, EC, EP\u0026gt; This policy assumes that EC has the interface of std::error_code, and EP has the interface of std::exception_ptr. Upon missing value observation:\n if an exception is stored through pointer of type EP it is rethrown; otherwise, if an error of type EC is stored, it is converted to error_code and then thrown as system_error. Upon missing error observation throws:\n bad_result_access(\u0026quot;no error\u0026quot;) from instances of basic_result\u0026lt;\u0026gt;. bad_outcome_access(\u0026quot;no error\u0026quot;) from instances of basic_outcome\u0026lt;\u0026gt;. Upon missing exception observation throws bad_outcome_access(\u0026quot;no exception\u0026quot;).\nOverloads are provided for boost::system::error_code and boost::exception_ptr.\nNote that if is_error_code_available\u0026lt;T\u0026gt; is true for EC, and (if basic_outcome) is_exception_ptr_available\u0026lt;T\u0026gt; is true for EP, default_policy chooses error_code_throw_as_system_error\u0026lt;T, EC, EP\u0026gt; as the no-value policy.\n\u0026nbsp;\nexception_ptr_rethrow\u0026lt;T, EC, EP\u0026gt; This policy assumes that either EC or EP (unless void) has the interface of std::exception_ptr. Upon missing value observation:\n in instances of basic_result\u0026lt;\u0026gt;, rethrows exception pointed to by EC; in instances of basic_outcome\u0026lt;\u0026gt;, if exception EP is present rethrows it, otherwise rethrows EC. Upon missing error observation:\n in instances of basic_result\u0026lt;\u0026gt;, throws bad_result_access(\u0026quot;no error\u0026quot;) ; in instances of basic_outcome\u0026lt;\u0026gt;, throws bad_outcome_access(\u0026quot;no error\u0026quot;). Upon missing exception observation throws bad_outcome_access(\u0026quot;no exception\u0026quot;).\nOverloads are provided for boost::exception_ptr.\nNote that if is_exception_ptr_available\u0026lt;T\u0026gt; is true for EC, or (if basic_outcome) is_exception_ptr_available\u0026lt;T\u0026gt; is true for EP, default_policy chooses exception_ptr_rethrow\u0026lt;T, EC, EP\u0026gt; as the no-value policy.\n\u0026nbsp;\nthrow_bad_result_access\u0026lt;EC\u0026gt; Upon missing value observation throws bad_result_access_with\u0026lt;EC\u0026gt;(ec), where ec is the value of the stored error. If error is not stored, the behaviour is undefined.\nUpon missing error observation throws bad_result_access(\u0026quot;no error\u0026quot;).\nThis policy can be used with basic_outcome\u0026lt;\u0026gt; instances, where it always throws bad_outcome_access for all no-value/error/exception observations.\nNote that checked\u0026lt;T, E = varies\u0026gt; aliases a basic_result with the throw_bad_result_access\u0026lt;EC\u0026gt; no-value policy.\n" }, +{ + "uri": "https://ned14.github.io/outcome/experimental/c-api/from-cxx/", + "title": "Calling C++ from C", + "tags": [], + "description": "", + "content": "C++ has excellent two-way compatibility with the C ABI, but there are some limitations you must observe to write C++ code which C code can call without marshalling at the ABI boundary:\n A C++ function may not throw exceptions if it is safe to call from C, and so should always be marked noexcept.\n A C++ function should be annotated with extern \u0026quot;C\u0026quot; to prevent its symbol being mangled, and thus give it the C rather than C++ ABI.\n You cannot use overloading in your extern \u0026quot;C\u0026quot; functions.\n You may only use types in your C++ function declaration for which these traits are both true:\n std::is_standard_layout_v\u0026lt;T\u0026gt; std::is_trivially_copyable_v\u0026lt;T\u0026gt; (Note that std::is_trivially_copyable_v\u0026lt;T\u0026gt; requires trivial destruction, but NOT trivial construction. This means that C++ can do non-trivial construction of otherwise trivial types)\n The above is what the standard officially requires for well defined C and C++ interop. However, all of the three major compilers MSVC, GCC and clang are considerably more relaxed. In those three major compilers, \u0026ldquo;almost-standard-layout\u0026rdquo; C++ types work fine in C.\n\u0026ldquo;Almost-standard-layout\u0026rdquo; C++ types have these requirements:\n No virtual functions or virtual base classes i.e. std::is_polymorphic_v\u0026lt;T\u0026gt; must be false. This is because the vptrs offset the proper front of the data layout in an unknowable way to C. Non-static data members of reference type appear to C as pointers. You must never supply from C to C++ a non-null pointer which is seen as a reference in C++. C++ inheritance is seen in C data layout as if the most derived class has nested variables of the inherited types at the top, in order of inheritance. Types with non-trivial destructors work fine so long as at least move construction and assignment is the same as copying bits like memcpy(). You just need to make sure instances of the type return to C++, and don\u0026rsquo;t get orphaned in C. This was referred to in previous pages in this section as \u0026ldquo;move relocating\u0026rdquo; types. Experimental Outcome\u0026rsquo;s support for being used from C does not meet the current strict requirements, and thus relies on the (very common) implementation defined behaviour just described (it is hoped that future C++ standards can relax the requirements to those just described).\nSpecifically, proposed status_code is an almost-standard-layout type, and thus while it can\u0026rsquo;t be returned from extern \u0026quot;C\u0026quot; functions as the compiler will complain, it is perfectly safe to return from C++ functions to C code on the three major compilers, as it is an \u0026ldquo;almost-standard-layout\u0026rdquo; C++ type if T is an \u0026ldquo;almost-standard-layout\u0026rdquo; C++ type.\n" +}, { "uri": "https://ned14.github.io/outcome/reference/concepts/", "title": "Concepts", @@ -238,7 +252,14 @@ "content": "The second part of the support is provided by header \u0026lt;outcome/coroutine_support.hpp\u0026gt; (or \u0026lt;outcome/experimental/coroutine_support.hpp\u0026gt; if you want Coroutine support for Experimental Outcome). This adds into namespace OUTCOME_V2_NAMESPACE::awaitables (or OUTCOME_V2_NAMESPACE::experimental::awaitables) these awaitable types suitable for returning from a Coroutinised function:\n eager\u0026lt;T, Executor = void\u0026gt; An eagerly evaluated Coroutine: invoking co_await upon a function returning one of these immediately begins the execution of the function now. If the function never suspends, the overhead is similar to calling an ordinary function.\n lazy\u0026lt;T, Executor = void\u0026gt; A lazily evaluated Coroutine (often named task\u0026lt;T\u0026gt; in most C++ Coroutine literature): invoking co_await upon a function returning one of these causes the function to be immediately suspended as soon as execution begins. Only resuming the execution of the coroutine proceeds execution.\n generator\u0026lt;T, Executor = void\u0026gt; A lazily evaluated generator of values: the coroutine is resumed to generate the next value, upon which it is suspended until the next iteration.\n atomic_eager\u0026lt;T, Executor = void\u0026gt;\neager\u0026lt;T\u0026gt; does not employ thread synchronisation during resumption of dependent coroutines which is fine if you do not traverse kernel threads during a suspend-resume cycle. If you do however potentially traverse kernel threads during suspend-resume, you ought to use atomic_eager\u0026lt;T\u0026gt; instead \u0026ndash; this uses atomics to synchronise the setting and checking of state to ensure correctness.\n atomic_lazy\u0026lt;T, Executor = void\u0026gt;\nSame for lazy\u0026lt;T\u0026gt; as atomic_eager\u0026lt;T\u0026gt; is for eager\u0026lt;T\u0026gt;.\n " }, { - "uri": "https://ned14.github.io/outcome/experimental/c-api/example/", + "uri": "https://ned14.github.io/outcome/experimental/c-api/from-c/declare/", + "title": "Declare a Result", + "tags": [], + "description": "Declaring a C Result", + "content": "// Declare to C a Result with a happy value of intptr_t CXX_DECLARE_RESULT_SYSTEM(result_int, intptr_t) // Save oneself typing out CXX_RESULT_SYSTEM(result_int) all the time typedef CXX_RESULT_SYSTEM(result_int) result; // Our custom C enum enum c_enum { c_enum_not_found, c_enum_bad_argument }; // Make a custom status code domain for this C enum CXX_DECLARE_RESULT_SYSTEM_FROM_ENUM(result_int, // The C Result type declared above c_enum, // The C enum we wish to wrap \u0026#34;{74ceb994-7622-3a21-07f0-b016aa705585}\u0026#34;, // Unique UUID for this domain // Mappings of C enum values to textual description and semantic equivalances to generic codes {c_enum::c_enum_not_found, \u0026#34;item not found\u0026#34;, {errc::no_such_file_or_directory}}, {c_enum::c_enum_bad_argument, \u0026#34;invoked wrong\u0026#34;, {errc::invalid_argument}}) // Make helper macros #define SUCCESS(v) CXX_MAKE_RESULT_SYSTEM_SUCCESS(result_int, (v)) #define FAILURE(v) CXX_MAKE_RESULT_SYSTEM_FROM_ENUM(result_int, c_enum, (v)) View this code on Github The key to making C programming easy is to alias the long complex things into short easy thing. Obviously SUCCESS(expr) and FAILURE(expr) is too generic, but for the purposes of this documentation it makes thing easier.\n" +}, +{ + "uri": "https://ned14.github.io/outcome/experimental/c-api/from-cxx/example/", "title": "Example C++ function", "tags": [], "description": "", @@ -266,7 +287,7 @@ "content": "The File I/O library we shall be using is very similar to the one we saw earlier in this tutorial:\n// You may remember this from the tutorial section on Custom Payloads namespace filelib { // Error code + paths related to a failure. Also causes ADL discovery // to check this namespace. struct failure_info { std::error_code ec; path path1{}, path2{}; }; // Tell Outcome that failure_info is to be treated as a std::error_code inline const std::error_code \u0026amp;make_error_code(const failure_info \u0026amp;fi) { return fi.ec; } // Tell Outcome that no-value observation should throw a custom exception inline void outcome_throw_as_system_error_with_payload(failure_info fi) { // If the error code is not filesystem related e.g. ENOMEM, throw that // as a standard STL exception. OUTCOME_V2_NAMESPACE::try_throw_std_exception_from_error(fi.ec); // Throw the exact same filesystem_error exception which the throwing // copy_file() edition does. throw filesystem_error(fi.ec.message(), std::move(fi.path1), std::move(fi.path2), fi.ec); } // Localise a result implementation specific to this namespace. template \u0026lt;classT\u0026gt; using result = OUTCOME_V2_NAMESPACE::result\u0026lt;T, failure_info\u0026gt;; // Writes a chunk of data to some file. Returns bytes written, or // failure_info. Never throws exceptions. result\u0026lt;size_t\u0026gt; write_file(string_view chunk) noexcept; } // namespace filelib View this code on Github This uses the advanced Outcome feature of programming the lazy synthesis of custom C++ exception throws from a payload carrying E type called failure_info. Like the HTTP library, it too template aliases a localised result implementation into its namespace with ADL bridging so Outcome customisation points can be discovered.\n" }, { - "uri": "https://ned14.github.io/outcome/experimental/worked-example/value_type/", + "uri": "https://ned14.github.io/outcome/experimental/worked-example-long/value_type/", "title": "The payload", "tags": [], "description": "", @@ -336,11 +357,18 @@ "content": "Something not mentioned at all until now (and properly described in the next section, Default actions) is that Outcome can be programmed take various actions when the user tries to observe .value() when there is no value, and so on for the other possible state observations.\nSeeing as we are replacing the throwing overload of copy_file() in the Filesystem TS with a result returning edition instead, it would make sense if an attempt to observe the value of an unsuccessful fs_result threw the exact same filesystem_error as the Filesystem TS does.\nTelling Outcome how to throw a filesystem_error with payload of the failing paths is easy:\nnamespace filesystem2 { // If we would like Outcome to do something other than the default action (see next // section), we can declare this ADL discovered free function to customise what // to do instead. // // Note that rvalue semantics are propagated internally by Outcome, so if the user // called .value() on a rvalued result, failure_info will be moved rather than // copied from the result. That means we can overload once with value semantics, // and not need to overload for lvalue and rvalue situations unless we really feel // we need to for some reason. inline void outcome_throw_as_system_error_with_payload(failure_info fi) { // If the error code is not filesystem related e.g. ENOMEM, throw that as a // standard STL exception. outcome::try_throw_std_exception_from_error(fi.ec); // Throw the exact same filesystem_error exception which the throwing copy_file() // edition does. throw filesystem_error(fi.ec.message(), std::move(fi.path1), // std::move(fi.path2), fi.ec); } } View this code on Github Reference documentation for the above functions:\n List of builtin outcome_throw_as_system_error_with_payload() overloads void try_throw_std_exception_from_error(std::error_code ec, const std::string \u0026amp;msg = std::string{}) Usage of our new \u0026ldquo;upgraded\u0026rdquo; Filesystem copy_file() might now be as follows:\n// Non-throwing use case auto o = filesystem2::copy_file(\u0026#34;dontexist\u0026#34;, \u0026#34;alsodontexist\u0026#34;); if(!o) { std::cerr \u0026lt;\u0026lt; \u0026#34;Copy file failed with error \u0026#34; \u0026lt;\u0026lt; o.error().ec.message() // \u0026lt;\u0026lt; \u0026#34; (path1 = \u0026#34; \u0026lt;\u0026lt; o.error().path1 \u0026lt;\u0026lt; \u0026#34;, path2 = \u0026#34; \u0026lt;\u0026lt; o.error().path2 \u0026lt;\u0026lt; \u0026#34;)\u0026#34; // \u0026lt;\u0026lt; std::endl; } // Throwing use case try { // Try to observe the successful value, thus triggering default actions which invokes // our outcome_throw_as_system_error_with_payload() above which then throws filesystem_error // exactly like the Filesystem TS does for its throwing overload. filesystem2::copy_file(\u0026#34;dontexist\u0026#34;, \u0026#34;alsodontexist\u0026#34;).value(); } catch(const filesystem2::filesystem_error \u0026amp;e) { std::cerr \u0026lt;\u0026lt; \u0026#34;Copy file failed with exception \u0026#34; \u0026lt;\u0026lt; e.what() // \u0026lt;\u0026lt; \u0026#34; (path1 = \u0026#34; \u0026lt;\u0026lt; e.path1() \u0026lt;\u0026lt; \u0026#34;, path2 = \u0026#34; \u0026lt;\u0026lt; e.path2() \u0026lt;\u0026lt; \u0026#34;)\u0026#34; // \u0026lt;\u0026lt; std::endl; } catch(const std::exception \u0026amp;e) { std::cerr \u0026lt;\u0026lt; \u0026#34;Copy file failed with exception \u0026#34; \u0026lt;\u0026lt; e.what() // \u0026lt;\u0026lt; std::endl; } View this code on Github " }, { - "uri": "https://ned14.github.io/outcome/experimental/c-api/example2/", + "uri": "https://ned14.github.io/outcome/experimental/c-api/from-c/", + "title": "C Results", + "tags": [], + "description": "Outcome's C Result support", + "content": "The C macro API header \u0026lt;outcome/experimental/result.h\u0026gt; has some macros for working with any kind of Result:\n CXX_DECLARE_RESULT(ident, T, E) Declares to C a basic_result type uniquely identified by ident. T is available at the member variable .value, and E is available at the member variable .error. If you call this from within C++, make SURE it is not within a extern \"C\" block! CXX_RESULT(ident) A reference to a previously declared result type with unique ident. CXX_RESULT_HAS_VALUE(r) Evaluates to 1 (true) if the input result has a value. CXX_RESULT_HAS_ERROR(r) Evaluates to 1 (true) if the input result has an error. CXX_RESULT_ERROR_IS_ERRNO(r) Evaluates to 1 (true) if the input result's error value is a code in the POSIX errno domain. The above let you work, somewhat awkwardly, with any C-compatible basic_result\u0026lt;T, E\u0026gt;. basic_result\u0026lt;T, E\u0026gt; is trivially copyable and standard layout if its T and E are both so, and it has the C layout:\nstruct cxx_result_##ident { union { T value; E error; }; unsigned flags; }; Note that this layout is different to that of CXX_DECLARE_STATUS_CODE as the C++ result has a different layout if E is a status code.\n" +}, +{ + "uri": "https://ned14.github.io/outcome/experimental/c-api/from-cxx/example2/", "title": "Calling it from C", "tags": [], "description": "", - "content": "Firstly we need to declare to C our result returning C++ function:\n// Declare our C++ function\u0026#39;s returning result type. Only needs to be done once. // This declares an `status_result\u0026lt;size_t, system_code\u0026gt;` which is an alias to // `basic_result\u0026lt;size_t, status_code\u0026lt;erased\u0026lt;intptr_t\u0026gt;\u0026gt;\u0026gt;`. // // The first parameter is some unique identifier for this type which will be used // whenever we reference this type in the future. CXX_DECLARE_RESULT_SYSTEM(to_string_rettype, size_t); // Tell C about our extern C++ function `to_string()` extern CXX_RESULT_SYSTEM(to_string_rettype) _Z9to_stringPcmi(char *buffer, size_t bufferlen, int v); View this code on Github Now let\u0026rsquo;s call the C++ function from C:\nvoid print(int v) { char buffer[4]; CXX_RESULT_SYSTEM(to_string_rettype) res; res = _Z9to_stringPcmi(buffer, sizeof(buffer), v); if(CXX_RESULT_HAS_VALUE(res)) { printf(\u0026#34;to_string(%d) fills buffer with \u0026#39;%s\u0026#39; of %zu characters\\n\u0026#34;, v, buffer, res.value); return; } // Is the error returned in the POSIX domain and thus an errno? if(CXX_RESULT_ERROR_IS_ERRNO(res)) { fprintf(stderr, \u0026#34;to_string(%d) failed with error code %d (%s)\\n\u0026#34;, v, (int) res.error.value, strerror((int) res.error.value)); return; } fprintf(stderr, \u0026#34;to_string(%d) failed with unknown error code %lld\\n\u0026#34;, v, (long long) res.error.value); } int main(void) { print(9); print(99); print(999); print(9999); return 0; } View this code on Github Running this C program yields:\nto_string(9) fills buffer with '9' of 1 characters to_string(99) fills buffer with '99' of 2 characters to_string(999) fills buffer with '999' of 3 characters to_string(9999) failed with error code 105 (No buffer space available) " + "content": "Firstly we need to declare to C our result returning C++ function:\n// Declare our C++ function\u0026#39;s returning result type. Only needs to be done once. // This declares an `status_result\u0026lt;size_t, system_code\u0026gt;` which is an alias to // `basic_result\u0026lt;size_t, status_code\u0026lt;erased\u0026lt;intptr_t\u0026gt;\u0026gt;\u0026gt;`. // // The first parameter is some unique identifier for this type which will be used // whenever we reference this type in the future. CXX_DECLARE_RESULT_SYSTEM(to_string_rettype, size_t) // Tell C about our extern C++ function `to_string()` extern CXX_RESULT_SYSTEM(to_string_rettype) _Z9to_stringPcmi(char *buffer, size_t bufferlen, int v); View this code on Github Now let\u0026rsquo;s call the C++ function from C:\nvoid print(int v) { char buffer[4]; CXX_RESULT_SYSTEM(to_string_rettype) res; res = _Z9to_stringPcmi(buffer, sizeof(buffer), v); if(CXX_RESULT_HAS_VALUE(res)) { printf(\u0026#34;to_string(%d) fills buffer with \u0026#39;%s\u0026#39; of %zu characters\\n\u0026#34;, v, buffer, res.value); return; } // Is the error returned in the POSIX domain and thus an errno? if(CXX_RESULT_ERROR_IS_ERRNO(res)) { fprintf(stderr, \u0026#34;to_string(%d) failed with error code %d (%s)\\n\u0026#34;, v, (int) res.error.value, strerror((int) res.error.value)); return; } fprintf(stderr, \u0026#34;to_string(%d) failed with unknown error code %lld\\n\u0026#34;, v, (long long) res.error.value); } int main(void) { print(9); print(99); print(999); print(9999); return 0; } View this code on Github Running this C program yields:\nto_string(9) fills buffer with '9' of 1 characters to_string(99) fills buffer with '99' of 2 characters to_string(999) fills buffer with '999' of 3 characters to_string(9999) failed with error code 105 (No buffer space available) " }, { "uri": "https://ned14.github.io/outcome/tutorial/essential/coroutines/", @@ -420,7 +448,7 @@ "content": " In the implementation of function print_half we have seen the usage of the macro OUTCOME_TRYV(expr)/OUTCOME_TRY(expr) :\nOUTCOME_TRY (auto i, BigInt::fromString(text)); The OUTCOME_TRY macro uses C macro overloading to select between two implementations based on the number of input parameters. If there is exactly one input parameter i.e. without the i, the control statement is roughly equivalent to:\nauto __result = BigInt::fromString(text); if (!__result) return __result.as_failure(); Where __result is a compile time generated unique name. This single argument form is equivalent to OUTCOME_TRYV(expr), incidentally.\nIf there are between two and eight parameters, this control statement is roughly equivalent to:\nauto __result = BigInt::fromString(text); if (!__result) return __result.as_failure(); auto i = __result.value(); So here i as the first C macro parameter is set to the value of any successful result.\nC macro overloads are provided for up to eight arguments. To prevent the confounding of the C preprocessor by commas in template specifications causing more than eight arguments appearing to the C preprocessor, you should consider wrapping the second argument in brackets.\nIf you are within a C++ Coroutine, you ought to use OUTCOME_CO_TRYV(expr)/OUTCOME_CO_TRY(expr) instead.\n Compiler-specific extension: OUTCOME_TRYX This macro makes use of a proprietary extension in GCC and clang, and is not portable. The macro is not made available on unsupported compilers, so you can test for its presence using #ifdef OUTCOME_TRYX.\n GCC and Clang provide an extension to C++ known as statement expressions. These make it possible to use a more convenient macro: OUTCOME_TRYX, which is an expression. With the above macro, the above declaration of variable i can be rewritten to:\nint i = OUTCOME_TRYX (BigInt::fromString(text)); This has an advantage that you can use it any place where you can put an expression, e.g., in \u0026ldquo;simple initialization\u0026rdquo;:\nif (int i = OUTCOME_TRYX(BigInt::fromString(text))) use_a_non_zero_int(i); or in as a subexpression of a bigger full expression:\nint ans = OUTCOME_TRYX(BigInt::fromString(\u0026#34;1\u0026#34;)) + OUTCOME_TRYX(BigInt::fromString(\u0026#34;2\u0026#34;)); There is also an OUTCOME_CO_TRYX(expr) if you are inside a C++ Coroutine.\n" }, { - "uri": "https://ned14.github.io/outcome/experimental/worked-example/constructor/", + "uri": "https://ned14.github.io/outcome/experimental/worked-example-long/constructor/", "title": "The constructor", "tags": [], "description": "", @@ -433,6 +461,13 @@ "description": "", "content": " is_basic_outcome\u0026lt;T\u0026gt; An integral constant type true for basic_outcome\u0026lt;T, EC, EP, NoValuePolicy\u0026gt; types.\n is_basic_result\u0026lt;T\u0026gt; An integral constant type true for basic_result\u0026lt;T, E, NoValuePolicy\u0026gt; types.\n is_error_code_available\u0026lt;T\u0026gt; True if an error code can be constructed from a T.\n is_error_type\u0026lt;E\u0026gt; A customisable integral constant type true for E types which are to receive error throwing no-value policies.\n is_error_type_enum\u0026lt;E, Enum\u0026gt; A customisable integral constant type true for E types constructible from Enum types which are to receive error throwing no-value policies.\n is_exception_ptr_available\u0026lt;T\u0026gt; True if an exception ptr can be constructed from a T.\n is_failure_type\u0026lt;T\u0026gt; An integral constant boolean variable true for failure_type\u0026lt;EC, E = void\u0026gt; types.\n is_move_bitcopying\u0026lt;T\u0026gt; (\u0026gt;= Outcome v2.2.0) A customisable integral constant type true for T types which are move bitcopying safe.\n is_success_type\u0026lt;T\u0026gt; An integral constant boolean variable true for success_type\u0026lt;T\u0026gt; types.\n type_can_be_used_in_basic_result\u0026lt;R\u0026gt; A constexpr boolean true for types permissible in basic_result\u0026lt;T, E, NoValuePolicy\u0026gt;.\n " }, +{ + "uri": "https://ned14.github.io/outcome/experimental/c-api/from-c/use/", + "title": "Using a Result", + "tags": [], + "description": "Using a C Result", + "content": "This models the earlier C++ example of use, and its C equivalent isn\u0026rsquo;t much more verbose thanks to our helper typedefs and macros:\nresult positive_only(int x) { if(x \u0026lt; 0) { return FAILURE(c_enum_bad_argument); } return SUCCESS(x); } bool test(int x) { result r = positive_only(x); if(CXX_RESULT_HAS_ERROR(r)) { if(outcome_status_code_equal_generic(\u0026amp;r.error, EINVAL)) { fprintf(stderr, \u0026#34;Positive numbers only!\\n\u0026#34;); return false; } } return true; } View this code on Github For this to link, the CXX_DECLARE_RESULT_SYSTEM_FROM_ENUM macro needs to be compiled at least once within C++ within the final binary to emit the extern functions needed by C.\n" +}, { "uri": "https://ned14.github.io/outcome/alternatives/expected/", "title": "std expected", @@ -504,12 +539,19 @@ "content": " auto basic_outcome_failure_exception_from_error(const EC \u0026amp;) ADL discovered free function synthesising an exception type from an error type, used by the .failure() observers.\n decltype(auto) error_code(T \u0026amp;\u0026amp;) Extracts a boost::system::error_code or std::error_code from the input via ADL discovery of a suitable make_error_code(T) function.\n decltype(auto) exception_ptr(T \u0026amp;\u0026amp;) Extracts a boost::exception_ptr or std::exception_ptr from the input via ADL discovery of a suitable make_exception_ptr(T) function.\n void outcome_throw_as_system_error_with_payload(BoostErrorCodeEnum \u0026amp;\u0026amp;) Specialisation of outcome_throw_as_system_error_with_payload() for input types where boost::system::is_error_code_enum\u0026lt;BoostErrorCodeEnum\u0026gt; or boost::system::is_error_condition_enum\u0026lt;BoostErrorCodeEnum\u0026gt; is true.\n void outcome_throw_as_system_error_with_payload(ErrorCodeEnum \u0026amp;\u0026amp;) Specialisation of outcome_throw_as_system_error_with_payload() for input types where std::is_error_code_enum\u0026lt;ErrorCodeEnum\u0026gt; or std::is_error_condition_enum\u0026lt;ErrorCodeEnum\u0026gt; is true.\n void outcome_throw_as_system_error_with_payload(const boost::system::error_code \u0026amp;) Specialisation of outcome_throw_as_system_error_with_payload() for boost::system::error_code.\n void outcome_throw_as_system_error_with_payload(const std::error_code \u0026amp;) Specialisation of outcome_throw_as_system_error_with_payload() for std::error_code.\n " }, { - "uri": "https://ned14.github.io/outcome/experimental/worked-example/string_ref/", + "uri": "https://ned14.github.io/outcome/experimental/worked-example-long/string_ref/", "title": "String refs", "tags": [], "description": "", "content": "\u0026lt;system_error2\u0026gt; does not use std::string to return possibly statically or dynamically allocated strings, and thus avoids dragging in a lot of the standard library which impacts build times.\nInstead status code domains have a string_ref, which has a polymorphic implementation which may or may not manage a dynamic memory allocation using an atomic reference counter. Due to this polymorphism, you don\u0026rsquo;t need to worry which implementation is actually in use under the bonnet when you pass around string_ref instances.\nstring_ref provides the same member functions as a span\u0026lt;const char\u0026gt;, and so participates ordinarily in STL algorithms and containers. In particular, if you need to string search or slice it, you can construct a string_view on top easily.\n// Return the name of our custom code domain virtual _base::string_ref name() const noexcept override final // NOLINT { static string_ref v(\u0026#34;file i/o error domain\u0026#34;); return v; // NOLINT } View this code on Github Now you understand what string_ref does, returning the name of the status code domain is self describing. Note we use the non-managing constructor of string_ref, as the string \u0026quot;file i/o error domain\u0026quot; is statically stored. We cache the returned value locally in static storage.\n" }, +{ + "uri": "https://ned14.github.io/outcome/experimental/c-api/from-c/try/", + "title": "TRY a C Result", + "tags": [], + "description": "Operation TRY on a C Result", + "content": "Thanks to much of the magic of OUTCOME_TRY(var, expr) being implemented using C preprocessor metaprogramming, we can offer a very similar experience for the C try operation and without needing anything compiled in C++ as support functions:\nresult test2(int x) { CXX_RESULT_SYSTEM_TRY(int v, // what to set to value if successful fprintf(stderr, \u0026#34;Positive numbers only!\\n\u0026#34;), // what cleanup to run if unsuccessful positive_only(x)); return SUCCESS(v + 1); } View this code on Github The principle difference is that you can specify a cleanup routine to perform if failure is encountered. This is especially useful in C, which has no stack unwinding.\nAlso due to lack of type sugaring and user defined implicit conversions, if your callers result type isn\u0026rsquo;t your callee\u0026rsquo;s, you may need to specify what your caller\u0026rsquo;s result type is so the error state can be correctly propagated.\n" +}, { "uri": "https://ned14.github.io/outcome/tutorial/essential/result/try_greedy/", "title": "TRY is greedy", @@ -559,13 +601,6 @@ "description": "How to metaprogram construction of objects which use result<T, EC> to return failure instead of throwing a C++ exception.", "content": "An oft-asked question during conference talks on Expected/Outcome is how to exclusively use result to implement constructor failure. This is asked because whilst almost every member function in a class can return a result, constructors do not return values and thus cannot return a result. The implication is that one cannot avoid throwing C++ exceptions to abort a construction.\nAs with most things in C++, one can achieve zero-exception-throw object construction using a lot of extra typing of boilerplate, and a little bit of simple C++ metaprogramming. This section shows you how to implement these for those who are absolutely adverse to ever throwing an exception, or cannot because C++ exceptions have been globally disabled.\nThe technique described here is not suitable for non-copyable and non-movable types. There is also an assumption that moving your type is cheap.\n" }, -{ - "uri": "https://ned14.github.io/outcome/experimental/c-api/reference/", - "title": "C Macro API Reference", - "tags": [], - "description": "", - "content": " The C macro API header \u0026lt;outcome/experimental/result.h\u0026gt; consists of these macros:\n CXX_DECLARE_RESULT(ident, T, E) Declares to C a basic_result type uniquely identified by ident. T is available at the member variable .value, and E is available at the member variable .error. CXX_RESULT(ident) A reference to a previously declared result type with unique ident. CXX_RESULT_HAS_VALUE(r) Evaluates to 1 (true) if the input result has a value. CXX_RESULT_HAS_ERROR(r) Evaluates to 1 (true) if the input result has an error. CXX_RESULT_ERROR_IS_ERRNO(r) Evaluates to 1 (true) if the input result's error value is a code in the POSIX errno domain. The above let you work, somewhat awkwardly, with any C-compatible basic_result\u0026lt;T, E\u0026gt;. basic_result\u0026lt;T, E\u0026gt; is trivially copyable and standard layout if its T and E are both so, and it has the C layout:\nstruct cxx_result_##ident { union { T value; E error; }; unsigned flags; }; \u0026lt;system_error2\u0026gt; support Because erased status codes are not trivially copyable and therefore do not have union based storage, we have separate C macros for results whose E is an erased status code:\n CXX_DECLARE_STATUS_CODE(ident, value_type) Declares to C a status code type with domain value_type available at the member variable .value. The ident must be any identifier fragment unique in this translation unit. It is used to uniquely identify this status code type in other macros. CXX_STATUS_CODE(ident) A reference to a previously declared status code type with unique ident. CXX_DECLARE_RESULT_STATUS_CODE(ident, T, E) Declares to C a basic_result type uniquely identified by ident. T is available at the member variable .value, and E is available at the member variable .error. CXX_RESULT_STATUS_CODE(ident) A reference to a previously declared result type with unique ident. There is a high likelihood that C++ functions regularly called by C code will return their failures either in erased system_code or in posix_code (i.e. errno code domain). Via querying the returned value using CXX_RESULT_ERROR_IS_ERRNO(r), one can determine if the returned code is in the errno code domain, and thus can be fed to strerror() and so on. Therefore there are convenience macro APIs for those particular use cases.\n CXX_DECLARE_RESULT_ERRNO(ident, T) Declares to C a basic_result\u0026lt;T, posix_code\u0026gt; type uniquely identified by ident. CXX_RESULT_ERRNO(ident) A reference to a previously declared basic_result\u0026lt;T, posix_code\u0026gt; type with unique ident. CXX_DECLARE_RESULT_SYSTEM(ident, T) Declares to C a basic_result\u0026lt;T, system_code\u0026gt; type uniquely identified by ident. CXX_RESULT_SYSTEM(ident) A reference to a previously declared basic_result\u0026lt;T, system_code\u0026gt; type with unique ident. " -}, { "uri": "https://ned14.github.io/outcome/tutorial/advanced/hooks/hook_outcome/", "title": "Hook outcome", @@ -602,7 +637,7 @@ "content": "See here for this guide, but for boost::system::error_code.\nThis section illustrates how you can hook into the std::error_code system from the Standard Library in order to work with your own set of error codes. As is usually the case in C++, doing this is straightforward but requires typing boilerplate to tell the C++ STL about your custom error type. This is not part of Outcome library, but we still provide this short guide here, because how to do this is not well documented [1].\nSuppose you want to report all reasons for failure in converting a std::string to a non-negative int. The list is:\n EmptyString \u0026ndash; the input string is empty, IllegalChar \u0026ndash; input contains characters that are not digits, TooLong \u0026ndash; input represents a number, but this number would not fit into a variable of type int. #include \u0026lt;iostream\u0026gt;#include \u0026lt;string\u0026gt; // for string printing#include \u0026lt;system_error\u0026gt; // bring in std::error_code et al // This is the custom error code enum enum classConversionErrc { Success = 0, // 0 should not represent an error EmptyString = 1, IllegalChar = 2, TooLong = 3, }; namespace std { // Tell the C++ 11 STL metaprogramming that enum ConversionErrc // is registered with the standard error code system template \u0026lt;\u0026gt; struct is_error_code_enum\u0026lt;ConversionErrc\u0026gt; : true_type { }; } namespace detail { // Define a custom error code category derived from std::error_category classConversionErrc_category : public std::error_category { public: // Return a short descriptive name for the category virtual const char *name() const noexcept override final { return \u0026#34;ConversionError\u0026#34;; } // Return what each enum means in text virtual std::string message(int c) const override final { switch (static_cast\u0026lt;ConversionErrc\u0026gt;(c)) { case ConversionErrc::Success: return \u0026#34;conversion successful\u0026#34;; case ConversionErrc::EmptyString: return \u0026#34;converting empty string\u0026#34;; case ConversionErrc::IllegalChar: return \u0026#34;got non-digit char when converting to a number\u0026#34;; case ConversionErrc::TooLong: return \u0026#34;the number would not fit into memory\u0026#34;; default: return \u0026#34;unknown\u0026#34;; } } // OPTIONAL: Allow generic error conditions to be compared to me virtual std::error_condition default_error_condition(int c) const noexcept override final { switch (static_cast\u0026lt;ConversionErrc\u0026gt;(c)) { case ConversionErrc::EmptyString: return make_error_condition(std::errc::invalid_argument); case ConversionErrc::IllegalChar: return make_error_condition(std::errc::invalid_argument); case ConversionErrc::TooLong: return make_error_condition(std::errc::result_out_of_range); default: // I have no mapping for this code return std::error_condition(c, *this); } } }; } // Define the linkage for this function to be used by external code. // This would be the usual __declspec(dllexport) or __declspec(dllimport) // if we were in a Windows DLL etc. But for this example use a global // instance but with inline linkage so multiple definitions do not collide. #define THIS_MODULE_API_DECL extern inline // Declare a global function returning a static instance of the custom category THIS_MODULE_API_DECL const detail::ConversionErrc_category \u0026amp;ConversionErrc_category() { static detail::ConversionErrc_category c; return c; } // Overload the global make_error_code() free function with our // custom enum. It will be found via ADL by the compiler if needed. inline std::error_code make_error_code(ConversionErrc e) { return {static_cast\u0026lt;int\u0026gt;(e), ConversionErrc_category()}; } int main(void) { // Note that we can now supply ConversionErrc directly to error_code std::error_code ec = ConversionErrc::IllegalChar; std::cout \u0026lt;\u0026lt; \u0026#34;ConversionErrc::IllegalChar is printed by std::error_code as \u0026#34; \u0026lt;\u0026lt; ec \u0026lt;\u0026lt; \u0026#34; with explanatory message \u0026#34; \u0026lt;\u0026lt; ec.message() \u0026lt;\u0026lt; std::endl; // We can compare ConversionErrc containing error codes to generic conditions std::cout \u0026lt;\u0026lt; \u0026#34;ec is equivalent to std::errc::invalid_argument = \u0026#34; \u0026lt;\u0026lt; (ec == std::errc::invalid_argument) \u0026lt;\u0026lt; std::endl; std::cout \u0026lt;\u0026lt; \u0026#34;ec is equivalent to std::errc::result_out_of_range = \u0026#34; \u0026lt;\u0026lt; (ec == std::errc::result_out_of_range) \u0026lt;\u0026lt; std::endl; return 0; } View this code on Github This might look like a lot of extra boilerplate over simply using your custom error code enum directly, but look at the advantages:\n Any code which can speak std::error_code can now work with errors from your code, AND without being recompiled. std::system_error can now wrap your custom error codes seamlessly, allowing your custom error code to be converted into a C++ exception and back out again without losing information. std::error_code knows how to print itself, and will print your custom error code without extra work from you. As usually you\u0026rsquo;d need to define a print routine for any custom error code you\u0026rsquo;d write anyway, there is actually very little extra boilerplate here. If you implement the default_error_condition() override, you can allow code exclusively written to understand std::errc alone to examine your custom error code domain for equivalence to the standard error conditions, AND without being recompiled. This documentation recommends that when you define your custom enum for representing error_codes, you should always make sure that value 0 never represents an actual error: it should either represent a success or should not be provided at all. If you only intend to use your enum inside result\u0026lt;\u0026gt; or outcome\u0026lt;\u0026gt; you can just start your enumerations from 1. If you intend to also return std::error_code directly from functions, you should probably define value 0 as success, so that you are able to inform about function\u0026rsquo;s success by returning MyEnum::Success. This is because error_code\u0026rsquo;s contextual conversion to bool (which some people use to check if there was an error or not) only checks for the numeric value of the error code (without looking at error domain (category)).\n [1]: The only documentation I\u0026rsquo;m aware of is the quite old guide by Chris Kohlhoff, founder of ASIO and the Networking TS:\n http://blog.think-async.com/2010/04/system-error-support-in-c0x-part-1.html http://blog.think-async.com/2010/04/system-error-support-in-c0x-part-2.html http://blog.think-async.com/2010/04/system-error-support-in-c0x-part-3.html http://blog.think-async.com/2010/04/system-error-support-in-c0x-part-4.html http://blog.think-async.com/2010/04/system-error-support-in-c0x-part-5.html " }, { - "uri": "https://ned14.github.io/outcome/experimental/worked-example/message/", + "uri": "https://ned14.github.io/outcome/experimental/worked-example-long/message/", "title": "Redefining `message()`", "tags": [], "description": "", @@ -658,7 +693,7 @@ "content": "No doubt many will dislike the two-stage invocation pattern i.e.\nmake\u0026lt;file_handle\u0026gt;{\u0026#34;hello\u0026#34;}(); So let us examine the most obvious alternative: a templated free function make\u0026lt;T\u0026gt;.\nDue to the inability to partially specialise templated functions in C++, you need to use tagged overloading e.g.\ntemplate\u0026lt;class... Args\u0026gt; inline outcome::result\u0026lt;file_handle\u0026gt; make(std::in_place_type_t\u0026lt;file_handle\u0026gt;, Args\u0026amp;\u0026amp; ... args) { return file_handle::file(std::forward\u0026lt;Args\u0026gt;(args)...); } ... // Now you must always write this: make(std::in_place_type\u0026lt;file_handle\u0026gt;, \u0026#34;hello\u0026#34;); Tagged overloading is fine for smaller projects, but for larger code bases:\n It takes longer to type make(std::in_place_type\u0026lt;file_handle\u0026gt;, \u0026quot;hello\u0026quot;), and is possibly less intuitive to write, than it does make\u0026lt;file_handle\u0026gt;{\u0026quot;hello\u0026quot;}(). Compiler error messages are enormously clearer if you encode the permitted overloads for construction into the make\u0026lt;file_handle\u0026gt; type rather than letting a variadic free function fail to resolve an appropriate overload. Resolving variadic free function overloads is not constant time for the compiler, whereas resolving the type specialisation for make\u0026lt;file_handle\u0026gt; is constant time. In other words, free functions are expensive on build times, whereas fully specialised types are not. It actually turns out to be quite useful when writing generic code to pass around object constructing factory objects all of which have no parameters for their call operator. It becomes, effectively, a lazy construction mechanism. " }, { - "uri": "https://ned14.github.io/outcome/experimental/worked-example/source/", + "uri": "https://ned14.github.io/outcome/experimental/worked-example-long/source/", "title": "Constexpr domain source", "tags": [], "description": "", @@ -679,18 +714,25 @@ "content": " Hooks Functions used to hook into the functionality of basic_result and basic_outcome.\n uint16_t spare_storage(const basic_result|basic_outcome *) noexcept Returns the sixteen bits of spare storage in the specified result or outcome.\n void hook_outcome_construction(T *, U \u0026amp;\u0026amp;) noexcept (Until v2.2.0) ADL discovered free function hook invoked by the implicit constructors of basic_outcome.\n void hook_outcome_construction(T *, U \u0026amp;\u0026amp;, V \u0026amp;\u0026amp;) noexcept (Until v2.2.0) ADL discovered free function hook invoked by the implicit constructors of basic_outcome.\n void hook_outcome_copy_construction(T *, U \u0026amp;\u0026amp;) noexcept (Until v2.2.0) ADL discovered free function hook invoked by the converting copy constructors of basic_outcome.\n void hook_outcome_copy_construction(T *, U \u0026amp;\u0026amp;, V \u0026amp;\u0026amp;) noexcept (Until v2.2.0) ADL discovered free function hook invoked by the converting copy constructors of basic_outcome.\n void hook_outcome_in_place_construction(T *, in_place_type_t\u0026lt;U\u0026gt;, Args \u0026amp;\u0026amp;...) noexcept (Until v2.2.0) ADL discovered free function hook invoked by the in-place constructors of basic_outcome.\n void hook_outcome_move_construction(T *, U \u0026amp;\u0026amp;) noexcept (Until v2.2.0) ADL discovered free function hook invoked by the converting move constructors of basic_outcome.\n void hook_outcome_move_construction(T *, U \u0026amp;\u0026amp;, V \u0026amp;\u0026amp;) noexcept (Until v2.2.0) ADL discovered free function hook invoked by the converting move constructors of basic_outcome.\n void hook_result_construction(T *, U \u0026amp;\u0026amp;) noexcept (Until v2.2.0) ADL discovered free function hook invoked by the implicit constructors of basic_result.\n void hook_result_copy_construction(T *, U \u0026amp;\u0026amp;) noexcept (Until v2.2.0) ADL discovered free function hook invoked by the converting copy constructors of basic_result.\n void hook_result_in_place_construction(T *, in_place_type_t\u0026lt;U\u0026gt;, Args \u0026amp;\u0026amp;...) noexcept (Until v2.2.0) ADL discovered free function hook invoked by the in-place constructors of basic_result.\n void hook_result_move_construction(T *, U \u0026amp;\u0026amp;) noexcept (Until v2.2.0) ADL discovered free function hook invoked by the converting move constructors of basic_result.\n void override_outcome_exception(basic_outcome\u0026lt;T, EC, EP, NoValuePolicy\u0026gt; *, U \u0026amp;\u0026amp;) noexcept Overrides the exception to something other than what was constructed.\n void set_spare_storage(basic_result|basic_outcome *, uint16_t) noexcept Sets the sixteen bits of spare storage in the specified result or outcome.\n Iostream Functions used to print, serialise and deserialise basic_result and basic_outcome.\n std::istream \u0026amp;operator\u0026gt;\u0026gt;(std::istream \u0026amp;, basic_outcome\u0026lt;T, EC, EP, NoValuePolicy\u0026gt; \u0026amp;) Deserialises a basic_outcome from a std::istream.\n std::istream \u0026amp;operator\u0026gt;\u0026gt;(std::istream \u0026amp;, basic_result\u0026lt;T, E, NoValuePolicy\u0026gt; \u0026amp;) Deserialises a basic_result from a std::istream.\n std::ostream \u0026amp;operator\u0026lt;\u0026lt;(std::ostream \u0026amp;, const basic_outcome\u0026lt;T, EC, EP, NoValuePolicy\u0026gt; \u0026amp;) Serialises a basic_outcome to a std::ostream.\n std::ostream \u0026amp;operator\u0026lt;\u0026lt;(std::ostream \u0026amp;, const basic_result\u0026lt;T, E, NoValuePolicy\u0026gt; \u0026amp;) Serialises a basic_result to a std::ostream.\n std::string print(const basic_outcome\u0026lt;T, EC, EP, NoValuePolicy\u0026gt; \u0026amp;) Returns a string containing a human readable rendition of the basic_outcome.\n std::string print(const basic_result\u0026lt;T, E, NoValuePolicy\u0026gt; \u0026amp;) Returns a string containing a human readable rendition of the basic_result.\n Policy Functions used to customise how the policy classes operate.\n auto basic_outcome_failure_exception_from_error(const EC \u0026amp;) ADL discovered free function synthesising an exception type from an error type, used by the .failure() observers.\n decltype(auto) error_code(T \u0026amp;\u0026amp;) Extracts a boost::system::error_code or std::error_code from the input via ADL discovery of a suitable make_error_code(T) function.\n decltype(auto) exception_ptr(T \u0026amp;\u0026amp;) Extracts a boost::exception_ptr or std::exception_ptr from the input via ADL discovery of a suitable make_exception_ptr(T) function.\n void outcome_throw_as_system_error_with_payload(BoostErrorCodeEnum \u0026amp;\u0026amp;) Specialisation of outcome_throw_as_system_error_with_payload() for input types where boost::system::is_error_code_enum\u0026lt;BoostErrorCodeEnum\u0026gt; or boost::system::is_error_condition_enum\u0026lt;BoostErrorCodeEnum\u0026gt; is true.\n void outcome_throw_as_system_error_with_payload(ErrorCodeEnum \u0026amp;\u0026amp;) Specialisation of outcome_throw_as_system_error_with_payload() for input types where std::is_error_code_enum\u0026lt;ErrorCodeEnum\u0026gt; or std::is_error_condition_enum\u0026lt;ErrorCodeEnum\u0026gt; is true.\n void outcome_throw_as_system_error_with_payload(const boost::system::error_code \u0026amp;) Specialisation of outcome_throw_as_system_error_with_payload() for boost::system::error_code.\n void outcome_throw_as_system_error_with_payload(const std::error_code \u0026amp;) Specialisation of outcome_throw_as_system_error_with_payload() for std::error_code.\n auto failure(T \u0026amp;\u0026amp;, ...) Returns appropriate type sugar for constructing an unsuccessful result or outcome.\n auto success(T \u0026amp;\u0026amp;, ...) Returns appropriate type sugar for constructing a successful result or outcome.\n bool try_operation_has_value(X) Default implementation of try_operation_has_value(X) ADL customisation point for OUTCOME_TRY.\n decltype(auto) try_operation_extract_value(X) Default implementation of try_operation_extract_value(X) ADL customisation point for OUTCOME_TRY.\n decltype(auto) try_operation_return_as(X) Default implementation of try_operation_return_as(X) ADL customisation point for OUTCOME_TRY.\n std::error_code error_from_exception(std::exception_ptr \u0026amp;\u0026amp;ep = std::current_exception(), std::error_code not_matched = std::make_error_code(std::errc::resource_unavailable_try_again)) noexcept Returns an error code matching a thrown standard library exception.\n void strong_swap(bool \u0026amp;all_good, T \u0026amp;a, T \u0026amp;b) Tries to perform a strong guarantee swap.\n void try_throw_std_exception_from_error(std::error_code ec, const std::string \u0026amp;msg = std::string{}) Try to throw a standard library exception type matching an error code.\n " }, { - "uri": "https://ned14.github.io/outcome/experimental/worked-example/implicit_conversion/", + "uri": "https://ned14.github.io/outcome/experimental/worked-example-long/implicit_conversion/", "title": "Implicit conversion", "tags": [], "description": "", "content": "Back in The payload, we mentioned that there was no default implicit conversion of file_io_error (status_code\u0026lt;_file_io_error_domain\u0026gt;) to error, as error is too small to hold _file_io_error_domain::value_type.\nWe can tell the framework about available implicit conversions by defining an ADL discovered free function make_status_code() which takes our custom status code as input, and returns an error:\n// Now tell `error` how it can implicitly construct from `file_io_error`. // This is done by us defining a free function called `make_status_code()` // which is discovered using ADL. `error` is an alias to the refinement // `status_code\u0026lt;erased\u0026lt;intptr_t\u0026gt;\u0026gt;` which is a status code whose value type // has been erased into an `intptr_t`. `status_code\u0026lt;erased\u0026lt;intptr_t\u0026gt;\u0026gt;` // (i.e. `error`) are move bitcopying (P1029) i.e. they are move-only // types whose move operation is defined to leave the source in the same // representation as a default constructed instance, and for whose // non-trivial destructor when called upon a default constructed instance // is guaranteed to do nothing. inline outcome_e::system_code make_status_code(file_io_error v) { // `make_nested_status_code()` dynamically allocates memory to store an // instance of `file_io_error`, then returns a status code whose domain // specifies that its value type is a pointer to `file_io_error`. The // domain is a templated instance which indirects all observers of the // status code to the pointed-to status code. // // Note that the status code returned\u0026#39;s value type is a pointer, which // by definition fits into `intptr_t` and is trivially copyable. // Therefore `system_code` (which is also a type alias to // `status_code\u0026lt;erased\u0026lt;intptr_t\u0026gt;\u0026gt;`) is happy to implicitly construct // from the status code returned by `make_nested_status_code()`. return make_nested_status_code(std::move(v)); } View this code on Github We are now ready to use Experimental Outcome!\n" }, +{ + "uri": "https://ned14.github.io/outcome/experimental/outcome/", + "title": "Tying it all together", + "tags": [], + "description": "", + "content": " Firstly let\u0026rsquo;s alias a more convenient form of status_result:\ntemplate \u0026lt;classT, classE = outcome_e::error\u0026gt; using result = // outcome_e::status_result\u0026lt;T, E, outcome_e::policy::default_status_result_policy\u0026lt;T, E\u0026gt;\u0026gt;; View this code on Github (The defaulting of default_result_policy is superfluous, it\u0026rsquo;s already the default)\nWhat follows now is very standard Outcome code. Indeed, it would compile just fine under standard Outcome with only a few typedefs.\nresult\u0026lt;file_handle, file_io_error\u0026gt; open_file(const char *path) // models throws(file_io_error) { file_handle ret(::fopen(path, \u0026#34;r\u0026#34;)); if(ret) return ret; return file_io_error({errno, __LINE__, __FILE__}); } result\u0026lt;void\u0026gt; open_resource() // models throws(std::error) { for(;;) { result\u0026lt;file_handle, file_io_error\u0026gt; r = open_file(\u0026#34;some file\u0026#34;); if(r) break; file_io_error e = r.error(); if(e != outcome_e::errc::resource_unavailable_try_again) { // NOTE this implicitly converts from `file_io_error` to `error` via the // `make_status_code()` free function customisation point defined above. return e; } } // success continues here ... return outcome_e::success(); } int main(void) { result\u0026lt;void\u0026gt; r = open_resource(); if(r) printf(\u0026#34;Success!\\n\u0026#34;); else { auto e = std::move(r).error(); // A quick demonstration that the indirection works as indicated printf(\u0026#34;Returned error has a code domain of \u0026#39;%s\u0026#39;, a message of \u0026#39;%s\u0026#39;\\n\u0026#34;, e.domain().name().c_str(), e.message().c_str()); printf(\u0026#34;\\nAnd semantically comparing it to \u0026#39;errc::no_such_file_or_directory\u0026#39; = %d\\n\u0026#34;, e == outcome_e::errc::no_such_file_or_directory); } } View this code on Github And running this program yields:\nReturned error has a code domain of 'file i/o error domain', a message of 'No such file or directory (c:\\users\\ned\\documents\\boostish\\outcome\\doc\\src\\snippets\\experimental_status_code.cpp:195)' And semantically comparing it to 'errc::no_such_file_or_directory' = 1 Conclusion Once you get used to \u0026lt;system_error2\u0026gt; and the fact that any result with E = error is always move-only, using experimental Outcome is just like using normal Outcome. Except that codegen will be better, custom domains are safe to use in headers, semantic comparisons have guaranteed complexity bounds, and build times are much reduced.\nWhat\u0026rsquo;s not to like? :)\nFinally, if you have feedback on using experimental Outcome which you think would be of use to the standards committee when evaluating possible implementations of P0709 Zero overhead exceptions: Throwing values, please do get in touch! This especially includes successful experiences!!!\n" +}, { "uri": "https://ned14.github.io/outcome/changelog/", "title": "Changelog", "tags": [], "description": "", - "content": " v2.2.10 ? (Boost 1.86) [release] Enhancements: Something I\u0026rsquo;ve been meaning to do for far too long now is make the GDB pretty printers auto-loading so you don\u0026rsquo;t have to set up .gdbinit. This is now done. I also improved the pretty printers to also pretty print the C result type which can be very useful if working with that type, as it will print the error message in GDB. Experimental Outcome\u0026rsquo;s status_code has also gained its own auto-loading GDB pretty printer with display of strerror() if the code domain is POSIX or generic.\nBug fixes: The status enumeration used to track state internally did not list all possible enum values. This caused static analysers to complain. v2.2.9 15th April 2024 (Boost 1.85) [release] Enhancements: #293 - Some users wished that Outcome would be clean with -Wpedantic, this is now turned on for the test suite.\n#294 - All use of assert() has been replaced with OUTCOME_ASSERT, which can be user overridden at compile time.\n#295 - In git commit 12b14e1533848e9a0f7f3c38e41da0ee4e819770 (Aug 11 2022) status code had its paths changed due to its headers not previously having the right path convention. It was not realised at the time that in Boost.Outcome this resulted in \u0026lt;boost/outcome/experimental/status-code/status-code/headers.hpp\u0026gt; which is not desirable. This has now been remedied to remove the double status-code, which will obviously break any Boost.Outcome code which relies on the double status-code. Standalone Outcome is unaffected.\nv2.2.8 13th December 2023 (Boost 1.84) [release] Enhancements: cmake 3.9 is now the minimum required for standalone Outcome. This fixes a long standing cmake issue with probing for standard library facilities. cmake 3.9 is what RHEL7 ships with, when RHEL7 EOLs we may raise the minimum cmake version at that point. Bug fixes: There was a bug in the Outcome C++ coroutine awaitables whereby we were over eagerly resuming execution of coroutines which return one of our awaitables. It is surprising how many years have passed before this was noticed, but it is now fixed. It is believed that this has been fixed without affecting ABI stability, however mixing old Outcome and new Outcome in the same binary without recompiling all the C++ coroutine code to use new Outcome will not fix the bug. #291 - A Result or Outcome with void value type and move-only non-value type was only usable in const use cases, due to the lack of provision of non-const member functions in relevant observers injection layers for the void specialisation. The missing non-const member functions have now been added.\nv2.2.7 13th August 2023 (Boost 1.83) [release] Enhancements: Update the list of known compiler issues in the docs.\n Update Outcome.Experimental to match latest changes requested of status_code by WG21. This as usual will cause minor breakage due to LEWG renaming of things.\n Outcome previously took addresses of things not using std::addressof(), and until now nobody complained because custom operator\u0026amp; which doesn\u0026rsquo;t return an address is an abomination not used in much modern C++. But finally someone did complain, so for both normal Outcome and Experimental.Outcome, if you set OUTCOME_USE_STD_ADDRESSOF = 1, Outcome will use std::addressof()\n Bug fixes: #273 - Changes to other Boost libraries had caused Boost.Outcome\u0026rsquo;s test suite to fail to compile for some compiler and C++ language configurations in recent releases. Thanks to work contributed by @alandefreitas and @pdimov, Boost.Outcome now CI tests a wide range of compilers and configurations and it is believed all those corner case issues have been fixed or worked around, for the compilers and configurations within that CI matrix.\nStandalone Outcome\u0026rsquo;s test suite was never affected, as it did not have Boost changing underneath it. Nevertheless, a few of the compiler parse bug workarounds will have improved compatibility there too for atyical toolchain choices.\n Experimental.Outcome now supports big endian architectures. Implementation for them simply wasn\u0026rsquo;t done before under the assumption that nobody would be using Experimental.Outcome on big endian architectures. Turns out that was a wrong assumption! v2.2.6 24th March 2023 (Boost 1.82) [release] Enhancements: Update to latest status-code in Experimental.Outcome, which relocates its header files and may cause some end user inclusions to need path changes. Bug fixes: Latest status-code fixes a number of nasty bugs, some mild build breakage in Experimental.Outcome may occur as a result. See its commit log for more information. v2.2.4 11th August 2022 (Boost 1.80) [release] Enhancements: Update to latest status-code in Experimental.Outcome, which has some breaking changes and important bug fixes.\n Add generator\u0026lt;T, Executor = void\u0026gt; to coroutine awaitables.\n Add optional Executor template parameter to all Outcome awaitable types for improved compatibility with third party software such as ASIO.\n To Experimental.Outcome add clone() for basic_result and basic_outcome types whose EC is a status_code. Erased status codes are move-only which makes the Result/Outcome type move-only, but they provide a cloning function, so this convenience function both clones the status code and propagates the spare storage so stack backtraces etc are also cloned.\n Add type constraints to success() and failure() to disable them if they aren\u0026rsquo;t available.\n Work around a bug in GCC\u0026rsquo;s C++ Coroutines implementation whereby one gets an ICE from gimplify_expr in any OUTCOME_CO_TRY taking even a mildly complex expression, which obviously is a showstopper. The work around assigns the failure type to a stack temporary before co_return-ing that temporary. Thanks to RVO pre-17 and copy elision since, this should add no runtime overhead.\n Bug fixes: #261 Move assignable with move constructible not available did not work with void. v2.2.3 17th March 2022 (Boost 1.79) [release] Enhancements: Standalone Outcome permanently locks ABI to v2.2.3 release From this release onwards, you are guaranteed that any code compiled with v2.2.3 Outcome or newer will link without issue with any code compiled with a different version of Outcome after v2.2.3. As a result, OUTCOME_UNSTABLE_VERSION is no longer defined by default, and therefore OUTCOME_V2_NAMESPACE is now hard coded to outcome_v2 rather than a namespace which permutes per commit. Bug fixes: #255 Fix enabling of move assignable was not calculated correctly. v2.2.2 8th December 2021 (Boost 1.78) [release] Enhancements: #255 Restore Experimental Outcome constexpr compatibility in C++ 20 which was an undocumented property of the Outcome v2.1 series, and which had been dropped in the v2.2 series. GCC Coroutines support Coroutine support in GCCs after 10 is now correctly detected. Bug fixes: None. v2.2.1 13th August 2021 (Boost 1.77) [release] Bug fixes: #251 Fix failure to compile Boost.Outcome when the compiler declares support for C++ modules.\n Don\u0026rsquo;t use [[likely]] in GCCs before 9.\n #251 Make support for C++ modules opt-in.\n v2.2.0 16th April 2021 (Boost 1.76) [release] BREAKING CHANGE As announced for a year and three Boost releases, Outcome v2.2 became the default, replacing v2.1. All v2.1 Outcome code will need to be upgraded as described in the v2.1 =\u0026gt; v2.2 upgrade guide. This branch has a number of major breaking changes to Outcome v2.1, see the list of v2.2 major changes. Enhancements: VS2019.8 compatibility VS2019.8 changed how to enable Coroutines, which caused Outcome to not compile on that compiler. #237 If on C++ 20, we now use C++ 20 [[likely]] instead of compiler-specific markup to indicate when TRY has likely success or failure. BREAKING CHANGE #247 Previously the value of spare_storage(const basic_result|basic_outcome *) noexcept was not propagated over OUTCOME_TRY, which causes things like stack backtraces captured at the point of construction of an errored result to get dropped at every TRY point. This has been fixed by adding an optional spare_storage to success_type\u0026lt;T\u0026gt; and failure_type\u0026lt;T\u0026gt; , as well as to auto success(T \u0026amp;\u0026amp;, ...) and auto failure(T \u0026amp;\u0026amp;, ...) .\nYou should not notice this in your code, except that where before spare storage values did not propagate through TRY, now they do, which is a breaking change.\n Bug fixes: BREAKING CHANGE #244 It came as a shock to learn that OUTCOME_TRY had been broken since the inception of this library for certain corner case code:\noutcome::result\u0026lt;Foo\u0026gt; get_foo(); outcome::result\u0026lt;Foo\u0026gt; filter1(outcome::result\u0026lt;Foo\u0026gt; \u0026amp;\u0026amp;); outcome::result\u0026lt;Foo\u0026gt; \u0026amp;\u0026amp; filter2(outcome::result\u0026lt;Foo\u0026gt; \u0026amp;\u0026amp;); // This works fine, and always has OUTCOME_TRY(auto v, filter1(get_foo())) // This causes UB due to result\u0026lt;Foo\u0026gt; being destructed before move of value into v OUTCOME_TRY(auto v, filter2(get_foo())) Whilst reference passthrough filter functions are not common, they can turn up in highly generic code, where destruction before copy/move is not helpful.\nThe cause is that TRY used to work by binding the result of the expression to an auto \u0026amp;\u0026amp;unique, testing if that unique if successful or not, and if successful then moving from unique.value() into the user\u0026rsquo;s output variable. If the expression returned is a prvalue, the Result\u0026rsquo;s lifetime is extended by the bound reference to outside of the statement, and all is good. If the expression returned is an xvalue or lvalue, then the lifetime extension does not exceed that of the statement, and the Result is destructed after the semicolon succeeding the assignment to auto \u0026amp;\u0026amp;unique.\nThis bug has been fixed by TRY deducing the value category of its input expression as follows:\n prvalues =\u0026gt; auto unique = (expr) (breaking change) xvalue =\u0026gt; auto unique = (expr) (breaking change) lvalue =\u0026gt; auto unique = (expr) (breaking change) This ensures that xvalue and lvalue inputs do not cause unhelpfully early lifetime end, though it does silently change the behaviour of existing code which relied on rvalues and lvalues being passed through, as a new construct-move-destruct or construct-copy-destruct cycle is introduced to where there was none before. Also, before C++ 17, there is now an added copy/move for prvalue inputs, which does not affect runtime codegen due to Return Value Optimisation (RVO), but does cause Results containing non-copying non-moving types to fail to compile, which is a breaking change from beforehand.\nIf one wishes rvalues or lvalues to be passed through, one can avail of a new TRY syntax based on preprocessor overloading:\n OUTCOME_TRY((refspec, varname), expr) OUTCOME_TRYV2(refspec, expr) Here refspec is the storage to be used for both the internal temporary unique, AND varname. So if you write:\nFoo \u0026amp;\u0026amp;foo; OUTCOME_TRY((auto \u0026amp;\u0026amp;, v), filter2(foo)) \u0026hellip; then the internal unique is declared as auto \u0026amp;\u0026amp;unique = (filter2(foo)), and the output variable is declared as auto \u0026amp;\u0026amp;v = std::move(unique).assume_value(). This passes through the rvalue referencing, and completely avoids copies and moves of Foo. If you wish to not extract the value but also specify unique storage, there is a new OUTCOME_TRYV2(refspec, expr).\nMy thanks to KamilCuk from https://stackoverflow.com/questions/66069152/token-detection-within-a-c-preprocessor-macro-argument for all their help in designing the new overloaded TRY syntax. My thanks also to vasama for reporting this issue and working through how best to fix it with me.\n #249 The preprocessor logic for choosing when to use bool with concept on GCC was yet again refactored. This should fix those choices of GCC configuration which caused failure due to the wrong combination being chosen.\n v2.1.5 11th December 2020 (Boost 1.75) [release] Enhancements: The ADL discovered event hooks have been replaced with policy-specified event hooks instead This is due to brittleness (where hooks would quietly self-disable if somebody changed something), compiler bugs (a difference in compiler settings causes the wrong hooks, or some but not all hooks, to get discovered), and end user difficulty in using them at all. The policy-specified event hooks can be told to default to ADL discovered hooks for backwards compatibility: set OUTCOME_ENABLE_LEGACY_SUPPORT_FOR to less than 220 to enable emulation. Improve configuring OUTCOME_GCC6_CONCEPT_BOOL Older GCCs had boolean based concepts syntax, whereas newer GCCs are standards conforming. However the precise logic of when to use legacy and conforming syntax was not well understood, which caused Outcome to fail to compile depending on what options you pass to GCC. The new logic always uses the legacy syntax if on GCC 8 or older, otherwise we use conforming syntax if and only if GCC is in C++ 20 mode or later. This hopefully will resolve the corner case build failures on GCC. Bug fixes: Boost.Outcome should now compile with BOOST_NO_EXCEPTIONS defined Thanks to Emil, maintainer of Boost.Exception, making a change for me, Boost.Outcome should now compile with C++ exceptions globally disabled. You won\u0026rsquo;t be able to use boost::exception_ptr as it can\u0026rsquo;t be included if C++ exceptions are globally disabled. #236 In the Coroutine support the final_suspend() was not noexcept, despite being required to be so in the C++ 20 standard. This has been fixed, but only if your compiler implements noop_coroutine. Additionally, if noop_coroutine is available, we use the much more efficient coroutine handle returning variant of await_suspend() which should significantly improve codegen and context switching performance. v2.1.4 14th August 2020 (Boost 1.74) [release] Enhancements: BREAKING CHANGE void results and outcomes no longer default construct types during explicit construction Previously if you explicitly constructed a result\u0026lt;T\u0026gt; from a non-errored result\u0026lt;void\u0026gt;, it default constructed T. This was found to cause unhelpful surprise, so it has been disabled. New macro OUTCOME_ENABLE_LEGACY_SUPPORT_FOR The macro OUTCOME_ENABLE_LEGACY_SUPPORT_FOR can be used to enable aliasing of older naming and features to newer naming and features when using a newer version of Outcome. Concepts now have snake case style naming instead of camel case style When Outcome was first implemented, it was thought that C++ 20 concepts were going to have camel case style. This was changed before the C++ 20 release, and Outcome\u0026rsquo;s concepts have been renamed similarly. This won\u0026rsquo;t break any code in Outcome v2.1, as compatibility aliases are provided. However code compiled against Outcome v2.2 will need to be upgraded, unless OUTCOME_ENABLE_LEGACY_SUPPORT_FOR is set to less than 220. Concepts now live in OUTCOME_V2_NAMESPACE::concepts namespace Previously concepts lived in the convert namespace, now they live in their own namespace. New concepts basic_result\u0026lt;T\u0026gt; and basic_outcome\u0026lt;T\u0026gt; added End users were finding an unhelpful gap in between is_basic_result\u0026lt;T\u0026gt; and value_or_error\u0026lt;T\u0026gt; where they wanted a concept that matched types which were basic_result, but not exactly one of those. Concepts filling that gap were added. Operation TRY works differently from Outcome v2.2 onwards This is a severely code breaking change which change the syntax of how one uses OUTCOME_TRY(). A regular expression suitable for upgrading code can be found in the list of changes between Outcome v2.1 and v2.2. Bug fixes: #224 The clang Apple ships in Xcode 11.4 (currently the latest) has not been patched with the fixes to LLVM clang that fix noexcept(std::is_constructible\u0026lt;T, void\u0026gt;) failing to compile which I originally submitted years ago. So give up waiting on Apple to fix their clang, add a workaround to Outcome. Use of void in T or E caused noexcept(false) Direct traits examination of void was causing nothrow detection to return false, fixed. Spare storage could not be used from within no-value policy classes Due to an obvious brain fart when writing the code at the time, the spare storage APIs had the wrong prototype which prevented them working from within policy classes. Sorry. v2.1.3 29th April 2020 (Boost 1.73) [release] Enhancements: Performance of Outcome-based code compiled by clang has been greatly improved The previous implementation of Outcome\u0026rsquo;s status bitfield confused clang\u0026rsquo;s optimiser, which caused low quality codegen. Unlike most codegen issues, this was noticeably in empirical benchmarks of real world code, as was shown by P1886 Error speed benchmarking.\nThe safe part of the better_optimisation Outcome v2.2.0 future branch was merged to Outcome v2.1.3 which includes a new status bitfield implementation. This appears to not confuse clang\u0026rsquo;s optimiser, and clang 9 produces code which routinely beats GCC 9\u0026rsquo;s code for various canned use cases.\n Precompiled headers are automatically enabled on new enough cmake\u0026rsquo;s for standalone Outcome If on cmake 3.16 or later, its new precompiled headers build support is used to tell consumers of the outcome::hl cmake target to precompile Outcome, if and only if outcome_IS_DEPENDENCY is false. outcome_IS_DEPENDENCY is set by Outcome\u0026rsquo;s CMakeLists.txt if it detects that it was included using add_subdirectory(), so for the vast majority of Outcome end users, the use of precompiled headers will NOT be enabled.\nExported targets do NOT request precompilation of headers, as it is assumed that importers of the Outcome cmake targets will configure their own precompiled headers which incorporate Outcome.\n Installability is now CI tested per commit Due to installability of standalone Outcome (e.g. make install) breaking itself rather more frequently than is ideal, installability is now tested on CI per commit.\n Coroutines support has been documented The coroutines support added in v2.1.2 has now been properly documented.\n Bug fixes: #214 Newer Concepts implementing compilers were unhappy with the early check for destructibility of T and E, so removed template constraints, falling back to static assert which runs later in the type instantiation sequence. #215 For standalone Outcome, CMAKE_TOOLCHAIN_FILE is now passed through during dependency superbuild. This should solve build issues for some embedded toolchain users. #220 A false positive undefined behaviour sanitiser failure in some use cases of Experimental Outcome was worked around to avoid the failure message. #221 Restored compatibility with x86 on Windows, which was failing with link errors. It was quite surprising that this bug was not reported sooner, but obviously almost nobody is using Outcome with x86 on Windows. #223 Fix a segfault in Debug builds only when cloning a status_code_ptr in Experimental.Outcome only. v2.1.2 11th December 2019 (Boost 1.72) [release] Enhancements: Improved compatibility with cmake tooling Standalone outcome is now make install-able, and cmake find_package() can find it. Note that you must separately install and find_package() Outcome\u0026rsquo;s dependency, quickcpplib, else find_package() of Outcome will fail. Non-permissive parsing is now default in Visual Studio The default targets in standalone Outcome\u0026rsquo;s cmake now enable non-permissive parsing. This was required partially because VS2019 16.3\u0026rsquo;s quite buggy Concepts implementation is unusuable in permissive parsing mode. Even then, lazy ADL two phase lookup is broken in VS2019 16.3 with /std:latest, you may wish to use an earlier language standard. Breaking change! The git submodule mechanism used by standalone Outcome of specifying dependent libraries has been replaced with a cmake superbuild of dependencies mechanism instead. Upon cmake configure, an internal copy of quickcpplib will be git cloned, built and installed into the build directory from where an internal find_package() uses it. This breaks the use of the unconfigured Outcome repo as an implementation of Outcome, one must now do one of: Add Outcome as subdirectory to cmake build. Use cmake superbuild (i.e. ExternalProject_Add()) to build and install Outcome into a local installation. Use one of the single header editions. Breaking change! For standalone Outcome, the current compiler is now checked for whether it will compile code containing C++ Concepts, and if it does, all cmake consumers of Outcome will enable C++ Concepts. Set the cmake variable CXX_CONCEPTS_FLAGS to an empty string to prevent auto detection and enabling of C++ Concepts support occurring. OUTCOME_TRY operation now hints to the compiler that operation will be successful P1886 Error speed benchmarking showed that there is considerable gain in very small functions by hinting to the compiler whether the expression is expected to be successful or not. OUTCOME_TRY previously did not hint to the compiler at all, but now it does. A new suite of macros OUTCOME_TRY_FAILURE_LIKELY hint to the compiler that failure is expected. If you wish to return to the previously unhinted behaviour, define OUTCOME_TRY_LIKELY(expr) to (!!expr). #199 Support for C++ Coroutines has been added. This comes in two parts, firstly there is now an OUTCOME_CO_TRY() operation suitable for performing the TRY operation from within a C++ Coroutine. Secondly, in the header outcome/coroutine_support.hpp there are implementations of eager\u0026lt;OutcomeType\u0026gt; and lazy\u0026lt;OutcomeType\u0026gt; which let you more naturally and efficiently use basic_result or basic_outcome from within C++ Coroutines \u0026ndash; specifically, if the result or outcome will construct from an exception pointer, exceptions thrown in the coroutine return an errored or excepted result with the thrown exception instead of throwing the exception through the coroutine machinery (which in current compilers, has a high likelihood of blowing up the program). Both eager\u0026lt;T\u0026gt; and lazy\u0026lt;T\u0026gt; can accept any T as well. Both have been tested and found working on VS2019 and clang 9. #210 make_error_code() and make_exception_ptr() are now additionally considered for compatible copy and move conversions for basic_result\u0026lt;\u0026gt;. This lets you construct a basic_result\u0026lt;T, E\u0026gt; into a basic_result\u0026lt;T, error_code\u0026gt;, where E is a custom type which has implemented the ADL discovered free function error_code make_error_code(E), but is otherwise unrelated to error_code. The same availability applies for exception_ptr with make_exception_ptr() being the ADL discovered free function. basic_outcome\u0026lt;\u0026gt; has less support for this than basic_result\u0026lt;\u0026gt; in order to keep constructor count down, but it will accept via this mechanism conversions from basic_result\u0026lt;\u0026gt; and failure_type\u0026lt;\u0026gt;. Bug fixes: #184 The detection of [[nodiscard]] support in the compiler was very mildly broken. v2.1.1 19th August 2019 (Boost 1.71) [release] Enhancements: #184 As per request from Boost release managers, relocated version.hpp and revision.hpp into detail, and added the Boost licence boilerplate to the top of every source file which was missing one (I think). Also took the opportunity to run the licence restamping script over all Outcome, so copyright dates are now up to date. #185 Add FAQ item explaining issue #185, and why we will do nothing to fix it right now. #189 Refactored the OUTCOME_TRY implementation to use more clarified customisation points capable of accepting very foreign inputs. Removed the std::experimental::expected\u0026lt;T, E\u0026gt; specialisations, as those are no longer necessary. Fixed the documentation for the customisation points which previously claimed that they are ADL discovered, which they are not. Added a recipe describing how to add in support for foreign input types. #183 Added a separate motivation/plug_error_code specifically for Boost. Bug fixes: - OUTCOME_VERSION_MINOR hadn\u0026rsquo;t been updated to 1. #181 Fix issue #181 where Outcome didn\u0026rsquo;t actually implement the strong swap guarantee, despite being documented as doing so. #190 Fix issue #190 in Boost edition where unit test suite was not runnable from the Boost release distro. #182 Fix issue #182 where trait::is_exception_ptr_available\u0026lt;T\u0026gt; was always true, thus causing much weirdness, like not printing diagnostics and trying to feed everything to make_exception_ptr(). #194 Fix issue #192 where the std::basic_outcome_failure_exception_from_error() was being defined twice for translation units which combine standalone and Boost Outcome\u0026rsquo;s. v2.1 12th Apr 2019 (Boost 1.70) [release] #180\n success() and failure() now produce types marked [[nodiscard]]. include/outcome/outcome.natvis is now namespace permuted like the rest of Outcome, so debugging Outcome based code in Visual Studio should look much prettier than before.\n #162\n .has_failure() was returning false at times when it should have returned true. #152\n GCC 5 no longer can compile Outcome at all due to https://stackoverflow.com/questions/45607450/gcc5-nested-variable-template-is-not-a-function-template. Added explicit version trap for GCC 5 to say it can not work. Note this is not a breaking change, GCC 5 was never supported officially in any v2 Outcome. #150\n BREAKING CHANGE result\u0026lt;T, E\u0026gt;, boost_result\u0026lt;T, E\u0026gt; and std_result\u0026lt;T, E\u0026gt; no longer implement hard UB on fetching a value from a valueless instance if E is a UDT, they now fail to compile with a useful error message. If you wish hard UB, use unchecked\u0026lt;T, E\u0026gt;, boost_unchecked\u0026lt;T, E\u0026gt; or std_unchecked\u0026lt;T, E\u0026gt; instead. #140\n Fixed a nasty corner case bug where value type\u0026rsquo;s without a copy constructor but with a move constructor would indicate via traits that copy construction was available. Thanks to Microsoft\u0026rsquo;s compiler team for reporting this issue. Added experimental status_result and status_outcome based on experimental status_code.\n Boost edition is now 100% Boost, so defaults for result and outcome are boost::system::error_code::errc_t and boost::exception_ptr. Moreover, the test suite in the Boost edition now exclusively tests the Boost edition. One can, of course, freely use the standalone edition with Boost, and the Boost edition with std types.\n Renamed ADL discovered customisation point throw_as_system_error_with_payload() to outcome_throw_as_system_error_with_payload().\n #135\n Added much clearer compile failure when user tries result\u0026lt;T, T\u0026gt; or outcome where two or more types are identical. Thanks to Andrzej Krzemieński for suggesting a technique which combines SFINAE correctness with the remaining ability for result\u0026lt;T, T\u0026gt; etc to be a valid type, but not constructible. #67\n Fixed one of the oldest long open bugs in Outcome, that the noexcept unit tests failed on OS X for an unknown reason. #115\n Outcome did not construct correctly from failure_type. Inexplicably outcome\u0026rsquo;s error + exception constructor had been removed. Nobody noticed during the Boost peer review, which is worrying seeing as that constructor is needed for one of the main advertised features to Boost!\n #107 and #116\n operator== and operator!= now become disabled if the value, error and exception types do not implement the same operator. Relatedly, both comparison operators simply didn\u0026rsquo;t work right. Fixed. #109\n swap() now has correct noexcept calculation and now correctly orders the swaps to be whichever is the throwing swap first. Added reference dump of v2.1 ABI so we can check if ABI breakage detection works in the next set of changes, plus Travis job to check ABI and API compatibility per commit.\n #124\n OUTCOME_TRY is now overloaded and selects void or auto edition according to input parameter count. #120\n Fix generation of double underscored temporary variables in OUTCOME_UNIQUE_NAME, which is UB. #110\n Separated result from its hard coded dependency on the \u0026lt;system_error\u0026gt; header. Renamed result and outcome to basic_result and basic_outcome. Renamed result.hpp into basic_result.hpp. Moved \u0026lt;system_error\u0026gt; and \u0026lt;exception\u0026gt; dependent code into new std_result.hpp and std_outcome.hpp header files. Added boost_result.hpp and boost_outcome.hpp which use Boost.System and Boost.Exception (these are result.hpp and outcome.hpp in the Boost edition). v2.0 18th Jan 2018 [release] Boost peer review edition. This is what was reviewed. Changelog from v1 can be found in the release notes for this release. " + "content": " v2.2.11 ? (Boost 1.87) [release] Enhancements: Outcome.Experimental has had C representation support since the beginning, however it had been mainly intended that C++ would originate Results, they would pass through C, and back into C++. It hadn\u0026rsquo;t really been expected that C would want to do much with Results other than inspect them for happy or sad path. It turns out there is more demand than expected for a more functional Result from within C, so this release adds the power to create Results in success and two types of failure, semantic comparison of Results, and printing of Result messages. You can also wrap a C enum into a quick status code from enum, allowing easy custom C error coding from 100% within C.\nThe documentation for the C support has been updated to reflect the new facilities.\nBug fixes: This was fixed in Standalone Outcome in the last release, but the fix came too late for Boost.Outcome which ended up shipping with inline GDB pretty printers with the wrong escaping which caused failure to load. v2.2.10 14th August 2024 (Boost 1.86) [release] Enhancements: Something I\u0026rsquo;ve been meaning to do for far too long now is make the GDB pretty printers auto-loading so you don\u0026rsquo;t have to set up .gdbinit. This is now done. I also improved the pretty printers to also pretty print the C result type which can be very useful if working with that type, as it will print the error message in GDB. Experimental Outcome\u0026rsquo;s status_code has also gained its own auto-loading GDB pretty printer with display of strerror() if the code domain is POSIX or generic.\nBug fixes: The status enumeration used to track state internally did not list all possible enum values. This caused static analysers to complain. v2.2.9 15th April 2024 (Boost 1.85) [release] Enhancements: #293 - Some users wished that Outcome would be clean with -Wpedantic, this is now turned on for the test suite.\n#294 - All use of assert() has been replaced with OUTCOME_ASSERT, which can be user overridden at compile time.\n#295 - In git commit 12b14e1533848e9a0f7f3c38e41da0ee4e819770 (Aug 11 2022) status code had its paths changed due to its headers not previously having the right path convention. It was not realised at the time that in Boost.Outcome this resulted in \u0026lt;boost/outcome/experimental/status-code/status-code/headers.hpp\u0026gt; which is not desirable. This has now been remedied to remove the double status-code, which will obviously break any Boost.Outcome code which relies on the double status-code. Standalone Outcome is unaffected.\nv2.2.8 13th December 2023 (Boost 1.84) [release] Enhancements: cmake 3.9 is now the minimum required for standalone Outcome. This fixes a long standing cmake issue with probing for standard library facilities. cmake 3.9 is what RHEL7 ships with, when RHEL7 EOLs we may raise the minimum cmake version at that point. Bug fixes: There was a bug in the Outcome C++ coroutine awaitables whereby we were over eagerly resuming execution of coroutines which return one of our awaitables. It is surprising how many years have passed before this was noticed, but it is now fixed. It is believed that this has been fixed without affecting ABI stability, however mixing old Outcome and new Outcome in the same binary without recompiling all the C++ coroutine code to use new Outcome will not fix the bug. #291 - A Result or Outcome with void value type and move-only non-value type was only usable in const use cases, due to the lack of provision of non-const member functions in relevant observers injection layers for the void specialisation. The missing non-const member functions have now been added.\nv2.2.7 13th August 2023 (Boost 1.83) [release] Enhancements: Update the list of known compiler issues in the docs.\n Update Outcome.Experimental to match latest changes requested of status_code by WG21. This as usual will cause minor breakage due to LEWG renaming of things.\n Outcome previously took addresses of things not using std::addressof(), and until now nobody complained because custom operator\u0026amp; which doesn\u0026rsquo;t return an address is an abomination not used in much modern C++. But finally someone did complain, so for both normal Outcome and Experimental.Outcome, if you set OUTCOME_USE_STD_ADDRESSOF = 1, Outcome will use std::addressof()\n Bug fixes: #273 - Changes to other Boost libraries had caused Boost.Outcome\u0026rsquo;s test suite to fail to compile for some compiler and C++ language configurations in recent releases. Thanks to work contributed by @alandefreitas and @pdimov, Boost.Outcome now CI tests a wide range of compilers and configurations and it is believed all those corner case issues have been fixed or worked around, for the compilers and configurations within that CI matrix.\nStandalone Outcome\u0026rsquo;s test suite was never affected, as it did not have Boost changing underneath it. Nevertheless, a few of the compiler parse bug workarounds will have improved compatibility there too for atyical toolchain choices.\n Experimental.Outcome now supports big endian architectures. Implementation for them simply wasn\u0026rsquo;t done before under the assumption that nobody would be using Experimental.Outcome on big endian architectures. Turns out that was a wrong assumption! v2.2.6 24th March 2023 (Boost 1.82) [release] Enhancements: Update to latest status-code in Experimental.Outcome, which relocates its header files and may cause some end user inclusions to need path changes. Bug fixes: Latest status-code fixes a number of nasty bugs, some mild build breakage in Experimental.Outcome may occur as a result. See its commit log for more information. v2.2.4 11th August 2022 (Boost 1.80) [release] Enhancements: Update to latest status-code in Experimental.Outcome, which has some breaking changes and important bug fixes.\n Add generator\u0026lt;T, Executor = void\u0026gt; to coroutine awaitables.\n Add optional Executor template parameter to all Outcome awaitable types for improved compatibility with third party software such as ASIO.\n To Experimental.Outcome add clone() for basic_result and basic_outcome types whose EC is a status_code. Erased status codes are move-only which makes the Result/Outcome type move-only, but they provide a cloning function, so this convenience function both clones the status code and propagates the spare storage so stack backtraces etc are also cloned.\n Add type constraints to success() and failure() to disable them if they aren\u0026rsquo;t available.\n Work around a bug in GCC\u0026rsquo;s C++ Coroutines implementation whereby one gets an ICE from gimplify_expr in any OUTCOME_CO_TRY taking even a mildly complex expression, which obviously is a showstopper. The work around assigns the failure type to a stack temporary before co_return-ing that temporary. Thanks to RVO pre-17 and copy elision since, this should add no runtime overhead.\n Bug fixes: #261 Move assignable with move constructible not available did not work with void. v2.2.3 17th March 2022 (Boost 1.79) [release] Enhancements: Standalone Outcome permanently locks ABI to v2.2.3 release From this release onwards, you are guaranteed that any code compiled with v2.2.3 Outcome or newer will link without issue with any code compiled with a different version of Outcome after v2.2.3. As a result, OUTCOME_UNSTABLE_VERSION is no longer defined by default, and therefore OUTCOME_V2_NAMESPACE is now hard coded to outcome_v2 rather than a namespace which permutes per commit. Bug fixes: #255 Fix enabling of move assignable was not calculated correctly. v2.2.2 8th December 2021 (Boost 1.78) [release] Enhancements: #255 Restore Experimental Outcome constexpr compatibility in C++ 20 which was an undocumented property of the Outcome v2.1 series, and which had been dropped in the v2.2 series. GCC Coroutines support Coroutine support in GCCs after 10 is now correctly detected. Bug fixes: None. v2.2.1 13th August 2021 (Boost 1.77) [release] Bug fixes: #251 Fix failure to compile Boost.Outcome when the compiler declares support for C++ modules.\n Don\u0026rsquo;t use [[likely]] in GCCs before 9.\n #251 Make support for C++ modules opt-in.\n v2.2.0 16th April 2021 (Boost 1.76) [release] BREAKING CHANGE As announced for a year and three Boost releases, Outcome v2.2 became the default, replacing v2.1. All v2.1 Outcome code will need to be upgraded as described in the v2.1 =\u0026gt; v2.2 upgrade guide. This branch has a number of major breaking changes to Outcome v2.1, see the list of v2.2 major changes. Enhancements: VS2019.8 compatibility VS2019.8 changed how to enable Coroutines, which caused Outcome to not compile on that compiler. #237 If on C++ 20, we now use C++ 20 [[likely]] instead of compiler-specific markup to indicate when TRY has likely success or failure. BREAKING CHANGE #247 Previously the value of spare_storage(const basic_result|basic_outcome *) noexcept was not propagated over OUTCOME_TRY, which causes things like stack backtraces captured at the point of construction of an errored result to get dropped at every TRY point. This has been fixed by adding an optional spare_storage to success_type\u0026lt;T\u0026gt; and failure_type\u0026lt;T\u0026gt; , as well as to auto success(T \u0026amp;\u0026amp;, ...) and auto failure(T \u0026amp;\u0026amp;, ...) .\nYou should not notice this in your code, except that where before spare storage values did not propagate through TRY, now they do, which is a breaking change.\n Bug fixes: BREAKING CHANGE #244 It came as a shock to learn that OUTCOME_TRY had been broken since the inception of this library for certain corner case code:\noutcome::result\u0026lt;Foo\u0026gt; get_foo(); outcome::result\u0026lt;Foo\u0026gt; filter1(outcome::result\u0026lt;Foo\u0026gt; \u0026amp;\u0026amp;); outcome::result\u0026lt;Foo\u0026gt; \u0026amp;\u0026amp; filter2(outcome::result\u0026lt;Foo\u0026gt; \u0026amp;\u0026amp;); // This works fine, and always has OUTCOME_TRY(auto v, filter1(get_foo())) // This causes UB due to result\u0026lt;Foo\u0026gt; being destructed before move of value into v OUTCOME_TRY(auto v, filter2(get_foo())) Whilst reference passthrough filter functions are not common, they can turn up in highly generic code, where destruction before copy/move is not helpful.\nThe cause is that TRY used to work by binding the result of the expression to an auto \u0026amp;\u0026amp;unique, testing if that unique if successful or not, and if successful then moving from unique.value() into the user\u0026rsquo;s output variable. If the expression returned is a prvalue, the Result\u0026rsquo;s lifetime is extended by the bound reference to outside of the statement, and all is good. If the expression returned is an xvalue or lvalue, then the lifetime extension does not exceed that of the statement, and the Result is destructed after the semicolon succeeding the assignment to auto \u0026amp;\u0026amp;unique.\nThis bug has been fixed by TRY deducing the value category of its input expression as follows:\n prvalues =\u0026gt; auto unique = (expr) (breaking change) xvalue =\u0026gt; auto unique = (expr) (breaking change) lvalue =\u0026gt; auto unique = (expr) (breaking change) This ensures that xvalue and lvalue inputs do not cause unhelpfully early lifetime end, though it does silently change the behaviour of existing code which relied on rvalues and lvalues being passed through, as a new construct-move-destruct or construct-copy-destruct cycle is introduced to where there was none before. Also, before C++ 17, there is now an added copy/move for prvalue inputs, which does not affect runtime codegen due to Return Value Optimisation (RVO), but does cause Results containing non-copying non-moving types to fail to compile, which is a breaking change from beforehand.\nIf one wishes rvalues or lvalues to be passed through, one can avail of a new TRY syntax based on preprocessor overloading:\n OUTCOME_TRY((refspec, varname), expr) OUTCOME_TRYV2(refspec, expr) Here refspec is the storage to be used for both the internal temporary unique, AND varname. So if you write:\nFoo \u0026amp;\u0026amp;foo; OUTCOME_TRY((auto \u0026amp;\u0026amp;, v), filter2(foo)) \u0026hellip; then the internal unique is declared as auto \u0026amp;\u0026amp;unique = (filter2(foo)), and the output variable is declared as auto \u0026amp;\u0026amp;v = std::move(unique).assume_value(). This passes through the rvalue referencing, and completely avoids copies and moves of Foo. If you wish to not extract the value but also specify unique storage, there is a new OUTCOME_TRYV2(refspec, expr).\nMy thanks to KamilCuk from https://stackoverflow.com/questions/66069152/token-detection-within-a-c-preprocessor-macro-argument for all their help in designing the new overloaded TRY syntax. My thanks also to vasama for reporting this issue and working through how best to fix it with me.\n #249 The preprocessor logic for choosing when to use bool with concept on GCC was yet again refactored. This should fix those choices of GCC configuration which caused failure due to the wrong combination being chosen.\n v2.1.5 11th December 2020 (Boost 1.75) [release] Enhancements: The ADL discovered event hooks have been replaced with policy-specified event hooks instead This is due to brittleness (where hooks would quietly self-disable if somebody changed something), compiler bugs (a difference in compiler settings causes the wrong hooks, or some but not all hooks, to get discovered), and end user difficulty in using them at all. The policy-specified event hooks can be told to default to ADL discovered hooks for backwards compatibility: set OUTCOME_ENABLE_LEGACY_SUPPORT_FOR to less than 220 to enable emulation. Improve configuring OUTCOME_GCC6_CONCEPT_BOOL Older GCCs had boolean based concepts syntax, whereas newer GCCs are standards conforming. However the precise logic of when to use legacy and conforming syntax was not well understood, which caused Outcome to fail to compile depending on what options you pass to GCC. The new logic always uses the legacy syntax if on GCC 8 or older, otherwise we use conforming syntax if and only if GCC is in C++ 20 mode or later. This hopefully will resolve the corner case build failures on GCC. Bug fixes: Boost.Outcome should now compile with BOOST_NO_EXCEPTIONS defined Thanks to Emil, maintainer of Boost.Exception, making a change for me, Boost.Outcome should now compile with C++ exceptions globally disabled. You won\u0026rsquo;t be able to use boost::exception_ptr as it can\u0026rsquo;t be included if C++ exceptions are globally disabled. #236 In the Coroutine support the final_suspend() was not noexcept, despite being required to be so in the C++ 20 standard. This has been fixed, but only if your compiler implements noop_coroutine. Additionally, if noop_coroutine is available, we use the much more efficient coroutine handle returning variant of await_suspend() which should significantly improve codegen and context switching performance. v2.1.4 14th August 2020 (Boost 1.74) [release] Enhancements: BREAKING CHANGE void results and outcomes no longer default construct types during explicit construction Previously if you explicitly constructed a result\u0026lt;T\u0026gt; from a non-errored result\u0026lt;void\u0026gt;, it default constructed T. This was found to cause unhelpful surprise, so it has been disabled. New macro OUTCOME_ENABLE_LEGACY_SUPPORT_FOR The macro OUTCOME_ENABLE_LEGACY_SUPPORT_FOR can be used to enable aliasing of older naming and features to newer naming and features when using a newer version of Outcome. Concepts now have snake case style naming instead of camel case style When Outcome was first implemented, it was thought that C++ 20 concepts were going to have camel case style. This was changed before the C++ 20 release, and Outcome\u0026rsquo;s concepts have been renamed similarly. This won\u0026rsquo;t break any code in Outcome v2.1, as compatibility aliases are provided. However code compiled against Outcome v2.2 will need to be upgraded, unless OUTCOME_ENABLE_LEGACY_SUPPORT_FOR is set to less than 220. Concepts now live in OUTCOME_V2_NAMESPACE::concepts namespace Previously concepts lived in the convert namespace, now they live in their own namespace. New concepts basic_result\u0026lt;T\u0026gt; and basic_outcome\u0026lt;T\u0026gt; added End users were finding an unhelpful gap in between is_basic_result\u0026lt;T\u0026gt; and value_or_error\u0026lt;T\u0026gt; where they wanted a concept that matched types which were basic_result, but not exactly one of those. Concepts filling that gap were added. Operation TRY works differently from Outcome v2.2 onwards This is a severely code breaking change which change the syntax of how one uses OUTCOME_TRY(). A regular expression suitable for upgrading code can be found in the list of changes between Outcome v2.1 and v2.2. Bug fixes: #224 The clang Apple ships in Xcode 11.4 (currently the latest) has not been patched with the fixes to LLVM clang that fix noexcept(std::is_constructible\u0026lt;T, void\u0026gt;) failing to compile which I originally submitted years ago. So give up waiting on Apple to fix their clang, add a workaround to Outcome. Use of void in T or E caused noexcept(false) Direct traits examination of void was causing nothrow detection to return false, fixed. Spare storage could not be used from within no-value policy classes Due to an obvious brain fart when writing the code at the time, the spare storage APIs had the wrong prototype which prevented them working from within policy classes. Sorry. v2.1.3 29th April 2020 (Boost 1.73) [release] Enhancements: Performance of Outcome-based code compiled by clang has been greatly improved The previous implementation of Outcome\u0026rsquo;s status bitfield confused clang\u0026rsquo;s optimiser, which caused low quality codegen. Unlike most codegen issues, this was noticeably in empirical benchmarks of real world code, as was shown by P1886 Error speed benchmarking.\nThe safe part of the better_optimisation Outcome v2.2.0 future branch was merged to Outcome v2.1.3 which includes a new status bitfield implementation. This appears to not confuse clang\u0026rsquo;s optimiser, and clang 9 produces code which routinely beats GCC 9\u0026rsquo;s code for various canned use cases.\n Precompiled headers are automatically enabled on new enough cmake\u0026rsquo;s for standalone Outcome If on cmake 3.16 or later, its new precompiled headers build support is used to tell consumers of the outcome::hl cmake target to precompile Outcome, if and only if outcome_IS_DEPENDENCY is false. outcome_IS_DEPENDENCY is set by Outcome\u0026rsquo;s CMakeLists.txt if it detects that it was included using add_subdirectory(), so for the vast majority of Outcome end users, the use of precompiled headers will NOT be enabled.\nExported targets do NOT request precompilation of headers, as it is assumed that importers of the Outcome cmake targets will configure their own precompiled headers which incorporate Outcome.\n Installability is now CI tested per commit Due to installability of standalone Outcome (e.g. make install) breaking itself rather more frequently than is ideal, installability is now tested on CI per commit.\n Coroutines support has been documented The coroutines support added in v2.1.2 has now been properly documented.\n Bug fixes: #214 Newer Concepts implementing compilers were unhappy with the early check for destructibility of T and E, so removed template constraints, falling back to static assert which runs later in the type instantiation sequence. #215 For standalone Outcome, CMAKE_TOOLCHAIN_FILE is now passed through during dependency superbuild. This should solve build issues for some embedded toolchain users. #220 A false positive undefined behaviour sanitiser failure in some use cases of Experimental Outcome was worked around to avoid the failure message. #221 Restored compatibility with x86 on Windows, which was failing with link errors. It was quite surprising that this bug was not reported sooner, but obviously almost nobody is using Outcome with x86 on Windows. #223 Fix a segfault in Debug builds only when cloning a status_code_ptr in Experimental.Outcome only. v2.1.2 11th December 2019 (Boost 1.72) [release] Enhancements: Improved compatibility with cmake tooling Standalone outcome is now make install-able, and cmake find_package() can find it. Note that you must separately install and find_package() Outcome\u0026rsquo;s dependency, quickcpplib, else find_package() of Outcome will fail. Non-permissive parsing is now default in Visual Studio The default targets in standalone Outcome\u0026rsquo;s cmake now enable non-permissive parsing. This was required partially because VS2019 16.3\u0026rsquo;s quite buggy Concepts implementation is unusuable in permissive parsing mode. Even then, lazy ADL two phase lookup is broken in VS2019 16.3 with /std:latest, you may wish to use an earlier language standard. Breaking change! The git submodule mechanism used by standalone Outcome of specifying dependent libraries has been replaced with a cmake superbuild of dependencies mechanism instead. Upon cmake configure, an internal copy of quickcpplib will be git cloned, built and installed into the build directory from where an internal find_package() uses it. This breaks the use of the unconfigured Outcome repo as an implementation of Outcome, one must now do one of: Add Outcome as subdirectory to cmake build. Use cmake superbuild (i.e. ExternalProject_Add()) to build and install Outcome into a local installation. Use one of the single header editions. Breaking change! For standalone Outcome, the current compiler is now checked for whether it will compile code containing C++ Concepts, and if it does, all cmake consumers of Outcome will enable C++ Concepts. Set the cmake variable CXX_CONCEPTS_FLAGS to an empty string to prevent auto detection and enabling of C++ Concepts support occurring. OUTCOME_TRY operation now hints to the compiler that operation will be successful P1886 Error speed benchmarking showed that there is considerable gain in very small functions by hinting to the compiler whether the expression is expected to be successful or not. OUTCOME_TRY previously did not hint to the compiler at all, but now it does. A new suite of macros OUTCOME_TRY_FAILURE_LIKELY hint to the compiler that failure is expected. If you wish to return to the previously unhinted behaviour, define OUTCOME_TRY_LIKELY(expr) to (!!expr). #199 Support for C++ Coroutines has been added. This comes in two parts, firstly there is now an OUTCOME_CO_TRY() operation suitable for performing the TRY operation from within a C++ Coroutine. Secondly, in the header outcome/coroutine_support.hpp there are implementations of eager\u0026lt;OutcomeType\u0026gt; and lazy\u0026lt;OutcomeType\u0026gt; which let you more naturally and efficiently use basic_result or basic_outcome from within C++ Coroutines \u0026ndash; specifically, if the result or outcome will construct from an exception pointer, exceptions thrown in the coroutine return an errored or excepted result with the thrown exception instead of throwing the exception through the coroutine machinery (which in current compilers, has a high likelihood of blowing up the program). Both eager\u0026lt;T\u0026gt; and lazy\u0026lt;T\u0026gt; can accept any T as well. Both have been tested and found working on VS2019 and clang 9. #210 make_error_code() and make_exception_ptr() are now additionally considered for compatible copy and move conversions for basic_result\u0026lt;\u0026gt;. This lets you construct a basic_result\u0026lt;T, E\u0026gt; into a basic_result\u0026lt;T, error_code\u0026gt;, where E is a custom type which has implemented the ADL discovered free function error_code make_error_code(E), but is otherwise unrelated to error_code. The same availability applies for exception_ptr with make_exception_ptr() being the ADL discovered free function. basic_outcome\u0026lt;\u0026gt; has less support for this than basic_result\u0026lt;\u0026gt; in order to keep constructor count down, but it will accept via this mechanism conversions from basic_result\u0026lt;\u0026gt; and failure_type\u0026lt;\u0026gt;. Bug fixes: #184 The detection of [[nodiscard]] support in the compiler was very mildly broken. v2.1.1 19th August 2019 (Boost 1.71) [release] Enhancements: #184 As per request from Boost release managers, relocated version.hpp and revision.hpp into detail, and added the Boost licence boilerplate to the top of every source file which was missing one (I think). Also took the opportunity to run the licence restamping script over all Outcome, so copyright dates are now up to date. #185 Add FAQ item explaining issue #185, and why we will do nothing to fix it right now. #189 Refactored the OUTCOME_TRY implementation to use more clarified customisation points capable of accepting very foreign inputs. Removed the std::experimental::expected\u0026lt;T, E\u0026gt; specialisations, as those are no longer necessary. Fixed the documentation for the customisation points which previously claimed that they are ADL discovered, which they are not. Added a recipe describing how to add in support for foreign input types. #183 Added a separate motivation/plug_error_code specifically for Boost. Bug fixes: - OUTCOME_VERSION_MINOR hadn\u0026rsquo;t been updated to 1. #181 Fix issue #181 where Outcome didn\u0026rsquo;t actually implement the strong swap guarantee, despite being documented as doing so. #190 Fix issue #190 in Boost edition where unit test suite was not runnable from the Boost release distro. #182 Fix issue #182 where trait::is_exception_ptr_available\u0026lt;T\u0026gt; was always true, thus causing much weirdness, like not printing diagnostics and trying to feed everything to make_exception_ptr(). #194 Fix issue #192 where the std::basic_outcome_failure_exception_from_error() was being defined twice for translation units which combine standalone and Boost Outcome\u0026rsquo;s. v2.1 12th Apr 2019 (Boost 1.70) [release] #180\n success() and failure() now produce types marked [[nodiscard]]. include/outcome/outcome.natvis is now namespace permuted like the rest of Outcome, so debugging Outcome based code in Visual Studio should look much prettier than before.\n #162\n .has_failure() was returning false at times when it should have returned true. #152\n GCC 5 no longer can compile Outcome at all due to https://stackoverflow.com/questions/45607450/gcc5-nested-variable-template-is-not-a-function-template. Added explicit version trap for GCC 5 to say it can not work. Note this is not a breaking change, GCC 5 was never supported officially in any v2 Outcome. #150\n BREAKING CHANGE result\u0026lt;T, E\u0026gt;, boost_result\u0026lt;T, E\u0026gt; and std_result\u0026lt;T, E\u0026gt; no longer implement hard UB on fetching a value from a valueless instance if E is a UDT, they now fail to compile with a useful error message. If you wish hard UB, use unchecked\u0026lt;T, E\u0026gt;, boost_unchecked\u0026lt;T, E\u0026gt; or std_unchecked\u0026lt;T, E\u0026gt; instead. #140\n Fixed a nasty corner case bug where value type\u0026rsquo;s without a copy constructor but with a move constructor would indicate via traits that copy construction was available. Thanks to Microsoft\u0026rsquo;s compiler team for reporting this issue. Added experimental status_result and status_outcome based on experimental status_code.\n Boost edition is now 100% Boost, so defaults for result and outcome are boost::system::error_code::errc_t and boost::exception_ptr. Moreover, the test suite in the Boost edition now exclusively tests the Boost edition. One can, of course, freely use the standalone edition with Boost, and the Boost edition with std types.\n Renamed ADL discovered customisation point throw_as_system_error_with_payload() to outcome_throw_as_system_error_with_payload().\n #135\n Added much clearer compile failure when user tries result\u0026lt;T, T\u0026gt; or outcome where two or more types are identical. Thanks to Andrzej Krzemieński for suggesting a technique which combines SFINAE correctness with the remaining ability for result\u0026lt;T, T\u0026gt; etc to be a valid type, but not constructible. #67\n Fixed one of the oldest long open bugs in Outcome, that the noexcept unit tests failed on OS X for an unknown reason. #115\n Outcome did not construct correctly from failure_type. Inexplicably outcome\u0026rsquo;s error + exception constructor had been removed. Nobody noticed during the Boost peer review, which is worrying seeing as that constructor is needed for one of the main advertised features to Boost!\n #107 and #116\n operator== and operator!= now become disabled if the value, error and exception types do not implement the same operator. Relatedly, both comparison operators simply didn\u0026rsquo;t work right. Fixed. #109\n swap() now has correct noexcept calculation and now correctly orders the swaps to be whichever is the throwing swap first. Added reference dump of v2.1 ABI so we can check if ABI breakage detection works in the next set of changes, plus Travis job to check ABI and API compatibility per commit.\n #124\n OUTCOME_TRY is now overloaded and selects void or auto edition according to input parameter count. #120\n Fix generation of double underscored temporary variables in OUTCOME_UNIQUE_NAME, which is UB. #110\n Separated result from its hard coded dependency on the \u0026lt;system_error\u0026gt; header. Renamed result and outcome to basic_result and basic_outcome. Renamed result.hpp into basic_result.hpp. Moved \u0026lt;system_error\u0026gt; and \u0026lt;exception\u0026gt; dependent code into new std_result.hpp and std_outcome.hpp header files. Added boost_result.hpp and boost_outcome.hpp which use Boost.System and Boost.Exception (these are result.hpp and outcome.hpp in the Boost edition). v2.0 18th Jan 2018 [release] Boost peer review edition. This is what was reviewed. Changelog from v1 can be found in the release notes for this release. " }, { "uri": "https://ned14.github.io/outcome/tutorial/essential/conventions/", @@ -707,18 +749,18 @@ "content": "This is the final section of the tutorial, and it is unavoidably quite lengthy as we are going to tie together all of the material covered in the tutorial so far into a single, unified, application of Outcome\u0026rsquo;s facilities.\nOne thing which Outcome solves \u0026ndash; and which alternatives do not \u0026ndash; is how to non-intrusively tie together multiple third party libraries, each using Outcome \u0026ndash; or some other T|E implementatation like P0323 std::expected\u0026lt;T, E\u0026gt; \u0026ndash; with custom incommensurate E types, or indeed arbitrary return types which are \u0026ldquo;split\u0026rdquo; T|E return types. Solving this well is the coup de grâce of Outcome against alternative approaches to this problem domain, including std::expected\u0026lt;T, E\u0026gt;. It is the major reason why you should consider using Outcome over alternatives, including Expected.\nFirstly we shall explore some of the problems faced by the software developer when T|E return type based code proliferates at scale, where dozens of libraries may be using completely incompatible T|E return types.\nSecondly we shall introduce the ValueOrError concept support in Outcome, which implements a subset of the proposed WG21 ValueOrError concept framework.\nFinally, we shall then step through a worked example which mocks up a realistic situation that the software developer may find themselves in: tying together disparate third party libraries, whose source code cannot be modified, into an application-wide, mixed-mode T|E and exception throwing universal error handling system which is capable of accurately representing the original failure, but also propagating it in a way that the application can deal with universally.\n" }, { - "uri": "https://ned14.github.io/outcome/experimental/outcome/", - "title": "Tying it all together", + "uri": "https://ned14.github.io/outcome/experimental/worked-example/", + "title": "Worked example: Custom domain (the short way)", "tags": [], "description": "", - "content": " Firstly let\u0026rsquo;s alias a more convenient form of status_result:\ntemplate \u0026lt;classT, classE = outcome_e::error\u0026gt; using result = // outcome_e::status_result\u0026lt;T, E, outcome_e::policy::default_status_result_policy\u0026lt;T, E\u0026gt;\u0026gt;; View this code on Github (The defaulting of default_result_policy is superfluous, it\u0026rsquo;s already the default)\nWhat follows now is very standard Outcome code. Indeed, it would compile just fine under standard Outcome with only a few typedefs.\nresult\u0026lt;file_handle, file_io_error\u0026gt; open_file(const char *path) // models throws(file_io_error) { file_handle ret(::fopen(path, \u0026#34;r\u0026#34;)); if(ret) return ret; return file_io_error({errno, __LINE__, __FILE__}); } result\u0026lt;void\u0026gt; open_resource() // models throws(std::error) { for(;;) { result\u0026lt;file_handle, file_io_error\u0026gt; r = open_file(\u0026#34;some file\u0026#34;); if(r) break; file_io_error e = r.error(); if(e != outcome_e::errc::resource_unavailable_try_again) { // NOTE this implicitly converts from `file_io_error` to `error` via the // `make_status_code()` free function customisation point defined above. return e; } } // success continues here ... return outcome_e::success(); } int main(void) { result\u0026lt;void\u0026gt; r = open_resource(); if(r) printf(\u0026#34;Success!\\n\u0026#34;); else { auto e = std::move(r).error(); // A quick demonstration that the indirection works as indicated printf(\u0026#34;Returned error has a code domain of \u0026#39;%s\u0026#39;, a message of \u0026#39;%s\u0026#39;\\n\u0026#34;, e.domain().name().c_str(), e.message().c_str()); printf(\u0026#34;\\nAnd semantically comparing it to \u0026#39;errc::no_such_file_or_directory\u0026#39; = %d\\n\u0026#34;, e == outcome_e::errc::no_such_file_or_directory); } } View this code on Github And running this program yields:\nReturned error has a code domain of 'file i/o error domain', a message of 'No such file or directory (c:\\users\\ned\\documents\\boostish\\outcome\\doc\\src\\snippets\\experimental_status_code.cpp:195)' And semantically comparing it to 'errc::no_such_file_or_directory' = 1 Conclusion Once you get used to \u0026lt;system_error2\u0026gt; and the fact that any result with E = error is always move-only, using experimental Outcome is just like using normal Outcome. Except that codegen will be better, custom domains are safe to use in headers, semantic comparisons have guaranteed complexity bounds, and build times are much reduced.\nWhat\u0026rsquo;s not to like? :)\nFinally, if you have feedback on using experimental Outcome which you think would be of use to the standards committee when evaluating possible implementations of P0709 Zero overhead exceptions: Throwing values, please do get in touch! This especially includes successful experiences!!!\n" + "content": "The section after this one will take the long way through defining a custom domain which sometimes is necessary if you have particularly bespoke requirements. If however you just want to wrap a custom enum type of yours into its own custom code domain, the boilerplate can be automated away by filling in a few simple fields like this:\n// My custom enum type enum classcustom_failure { not_found, bad_argument }; // Tell `status_code` to stamp out a custom code domain for this enum type SYSTEM_ERROR2_NAMESPACE_BEGIN template \u0026lt;\u0026gt; struct quick_status_code_from_enum\u0026lt;custom_failure\u0026gt; : quick_status_code_from_enum_defaults\u0026lt;custom_failure\u0026gt; { // Text name of the enum static constexpr const auto domain_name = \u0026#34;My custom failure\u0026#34;; // Unique UUID for the enum. PLEASE use https://www.random.org/cgi-bin/randbyte?nbytes=16\u0026amp;format=h static constexpr const auto domain_uuid = \u0026#34;{be201f65-3962-dd0e-1266-a72e63776a42}\u0026#34;; // Map of each enum value to its text string, and list of semantically equivalent errc\u0026#39;s static const std::initializer_list\u0026lt;mapping\u0026gt; \u0026amp;value_mappings() { static const std::initializer_list\u0026lt;mapping\u0026gt; v = { // Format is: { enum value, \u0026#34;string representation\u0026#34;, { list of errc mappings ... } } {custom_failure::not_found, \u0026#34;item not found\u0026#34;, {errc::no_such_file_or_directory}}, // {custom_failure::bad_argument, \u0026#34;invoked wrong\u0026#34;, {errc::invalid_argument}}, // }; return v; } // Completely optional definition of mixin for the status code synthesised from `Enum`. It can be omitted. template \u0026lt;classBase\u0026gt; struct mixin : Base { using Base::Base; constexpr int custom_method() const { return 42; } }; }; SYSTEM_ERROR2_NAMESPACE_END View this code on Github Here we supply the bare minimum requirements for a status code domain:\n The name in text, so it can be printed. The unique UUID to identify when multiple copies of the domain are the same. PLEASE use https://www.random.org/cgi-bin/randbyte?nbytes=16\u0026amp;format=h to generate this, do not twiddle a few bits. For each enum value, its printable text and a sequence of errc:: enumerations which you think it is semantically equivalent to i.e. its mapping onto generic_code which is how status code defines the common mapping between status codes. If you later compare the status code to one of those values (or to another status code which also provides a mapping), if the generic codes are equivalent then the comparison will return true. This means code like if(sc == errc::no_such_file_or_directory) ... would match all custom error codes which mean \u0026lsquo;something was not found\u0026rsquo;. OPTIONAL: if you would like the custom status code type generated by this to have additional member functions or additional payload, you can define a mixin here to inject either data or functions or both. If you omit this, nothing gets injected. " }, { - "uri": "https://ned14.github.io/outcome/experimental/worked-example/", - "title": "Worked example: Custom domain", + "uri": "https://ned14.github.io/outcome/experimental/worked-example-long/", + "title": "Worked example: Custom domain (the long way)", "tags": [], "description": "", - "content": " Here follows a worked example of use of Experimental Outcome. It presents the same sample program I sent to the San Diego 2018 WG21 standards meeting after I was asked by the committee to demonstrate how P1095 implements P0709 in a working code example they could study and discuss.\nWe will walk through this worked example, step by step, explaining how each part works in detail. This will help you implement your own code based on Experimental Outcome.\nYou may find it useful to open now in a separate browser tab the reference API documentation for proposed \u0026lt;system_error2\u0026gt; at https://ned14.github.io/status-code/ (scroll half way down). The references in the comments to P1028 are to P1028 SG14 status_code and standard error object for P0709 Zero-overhead deterministic exceptions, which is the WG21 proposal paper for potential \u0026lt;system_error2\u0026gt;.\nGoal of this section We are going to define a simple custom code domain which defines that the status code\u0026rsquo;s payload will consist of a POSIX error code, and the __FILE__ and __LINE__ where the failure occurred. This custom status code will have an implicit conversion to type erased error defined, which dynamically allocates memory for the original status code, and outputs an error which manages that dynamic allocation, indirecting all queries etc to the erased custom status code type such that the error instance quacks as if just like the original. This demonstrates that error could just as equally convey a std::exception_ptr, for example, or indeed manage the lifetime of any pointer.\n" + "content": " Here follows a longer worked example of use of Experimental Outcome. It presents the same sample program I sent to the San Diego 2018 WG21 standards meeting after I was asked by the committee to demonstrate how P1095 implements P0709 in a working code example they could study and discuss.\nWe will walk through this worked example, step by step, explaining how each part works in detail. This will help you implement your own code based on Experimental Outcome.\nMost users will not need this level of customisation, and for them the preceding quick and easy approach will be much easier.\nYou may find it useful to open now in a separate browser tab the reference API documentation for proposed \u0026lt;system_error2\u0026gt; at https://ned14.github.io/status-code/ (scroll half way down). The references in the comments to P1028 are to P1028 SG14 status_code and standard error object for P0709 Zero-overhead deterministic exceptions, which is the WG21 proposal paper for potential \u0026lt;system_error2\u0026gt;.\nGoal of this section We are going to define a simple custom code domain which defines that the status code\u0026rsquo;s payload will consist of a POSIX error code, and the __FILE__ and __LINE__ where the failure occurred. This custom status code will have an implicit conversion to type erased error defined, which dynamically allocates memory for the original status code, and outputs an error which manages that dynamic allocation, indirecting all queries etc to the erased custom status code type such that the error instance quacks as if just like the original. This demonstrates that error could just as equally convey a std::exception_ptr, for example, or indeed manage the lifetime of any pointer.\n" }, { "uri": "https://ned14.github.io/outcome/history/", @@ -2132,7 +2174,7 @@ "title": "Home", "tags": [], "description": "", - "content": " Outcome 2.2 library At the end of December 2021, Standalone Outcome went guaranteed future ABI stable. From v2.2.3 onwards, you get ABI compatibilty guarantees across Outcome releases.\n Outcome is a set of tools for reporting and handling function failures in contexts where directly using C++ exception handling is unsuitable. Such contexts include:\n there are programs, or parts thereof, that are compiled with exceptions disabled;\n there are parts of program that have a lot of branches depending on types of failures, where if-statements are cleaner than try-catch blocks;\n there is a hard requirement that the failure path of execution should not cost more than the successful path of execution;\n there are situations, like in the filesystem library, where whether the failure should be handled remotely (using a C++ exception throw), or locally cannot be made inside the function and needs to be decided by the caller, and in the latter case throwing a C++ exception is not desirable for the aforementioned reasons;\n there are parts of the program/framework that themselves implement exception handling and prefer to not use exceptions to propagate failure reports across threads, tasks, fibers, etc;\n one needs to propagate exceptions through layers that do not implement exception throw safety;\n there is an external requirement (such as a company-wide policy) that failure handling paths are explicitly indicated in the code.\n where interoperation with C code, without having to resort to C++ exception wrapper shims, is important.\n Outcome addresses failure handling through returning a special type from functions, which is able to store either a successfully computed value (or void), or the information about failure. Outcome also comes with a set of idioms for dealing with such types.\nParticular care has been taken to ensure that Outcome has the lowest possible impact on build times, thus making it suitable for use in the global headers of really large codebases. Storage layout is guaranteed and is C-compatible for result\u0026lt;T, E\u0026gt;1, thus making Outcome based code long term ABI-stable.\nFully deterministic all-noexcept C++ Coroutine support in Outcome is particularly strong, and we supply Outcome-optimising eager\u0026lt;T, Executor = void\u0026gt;/atomic_eager\u0026lt;T, Executor = void\u0026gt; , lazy\u0026lt;T, Executor = void\u0026gt;/atomic_lazy\u0026lt;T, Executor = void\u0026gt; and generator\u0026lt;T, Executor = void\u0026gt; awaitables which work for any user type.\nSample usage The main workhorse in the Outcome library is result\u0026lt;T\u0026gt;: it represents either a successfully computed value of type T, or a std::error_code/boost::system::error_code2 representing the reason for failure. You use it in the function\u0026rsquo;s return type:\noutcome::result\u0026lt;string\u0026gt; data_from_file(string_view path) noexcept; View this code on Github It is possible to inspect the state manually:\nif (outcome::result\u0026lt;string\u0026gt; rslt = data_from_file(\u0026#34;config.cfg\u0026#34;)) use_string(rslt.value()); // returns string else throw LibError{rslt.error(), \u0026#34;config.cfg\u0026#34;}; // returns error_code View this code on Github Or, if this function is called in another function that also returns result\u0026lt;T\u0026gt;, you can use a dedicated control statement:\noutcome::result\u0026lt;int\u0026gt; process(const string\u0026amp; content) noexcept; outcome::result\u0026lt;int\u0026gt; int_from_file(string_view path) noexcept { OUTCOME_TRY(auto str, data_from_file(path)); // if control gets here data_from_file() has succeeded return process(str); // decltype(str) == string } View this code on Github OUTCOME_TRY is a control statement. If the returned result\u0026lt;T\u0026gt; object contains an error information, the enclosing function is immediately returned with result\u0026lt;U\u0026gt; containing the same failure information; otherwise an automatic object of type T is available in scope.\nThis library joined the Boost C++ libraries in the 1.70 release (Spring 2019). It can be grafted into much older Boost releases if desired.\n If you choose a C-compatible T and E type. [return] result\u0026lt;T\u0026gt; defaults to std::error_code for Standalone Outcome, and to boost::system::error_code for Boost.Outcome. You can mandate a choice using std_result\u0026lt;T\u0026gt; or boost_result\u0026lt;T\u0026gt;. [return] " + "content": " Outcome 2.2 library At the end of December 2021, Standalone Outcome went guaranteed future ABI stable. From v2.2.3 onwards, you get ABI compatibilty guarantees across Outcome releases.\n Outcome is a set of tools for reporting and handling function failures in contexts where directly using C++ exception handling is unsuitable. Such contexts include:\n there are programs, or parts thereof, that are compiled with exceptions disabled;\n there are parts of program that have a lot of branches depending on types of failures, where if-statements are cleaner than try-catch blocks;\n there is a hard requirement that the failure path of execution should not cost more than the successful path of execution;\n there are situations, like in the filesystem library, where whether the failure should be handled remotely (using a C++ exception throw), or locally cannot be made inside the function and needs to be decided by the caller, and in the latter case throwing a C++ exception is not desirable for the aforementioned reasons;\n there are parts of the program/framework that themselves implement exception handling and prefer to not use exceptions to propagate failure reports across threads, tasks, fibers, etc;\n one needs to propagate exceptions through layers that do not implement exception throw safety;\n there is an external requirement (such as a company-wide policy) that failure handling paths are explicitly indicated in the code.\n where interoperation with C code, without having to resort to C++ exception wrapper shims, is important.\n where your mostly C code base needs exception-like error handling, and the subset of Outcome\u0026rsquo;s functionality available in C is sufficient for your needs.\n Outcome addresses failure handling through returning a special type from functions, which is able to store either a successfully computed value (or void), or the information about failure. Outcome also comes with a set of idioms for dealing with such types.\nParticular care has been taken to ensure that Outcome has the lowest possible impact on build times, thus making it suitable for use in the global headers of really large codebases. Storage layout is guaranteed and is C-compatible for result\u0026lt;T, E\u0026gt;1, thus making Outcome based code long term ABI-stable.\nFully deterministic all-noexcept C++ Coroutine support in Outcome is particularly strong, and we supply Outcome-optimising eager\u0026lt;T, Executor = void\u0026gt;/atomic_eager\u0026lt;T, Executor = void\u0026gt; , lazy\u0026lt;T, Executor = void\u0026gt;/atomic_lazy\u0026lt;T, Executor = void\u0026gt; and generator\u0026lt;T, Executor = void\u0026gt; awaitables which work for any user type.\nSample usage (C++) The main workhorse in the Outcome library is result\u0026lt;T\u0026gt;: it represents either a successfully computed value of type T, or a std::error_code/boost::system::error_code2 representing the reason for failure. You use it in the function\u0026rsquo;s return type:\noutcome::result\u0026lt;string\u0026gt; data_from_file(string_view path) noexcept; View this code on Github It is possible to inspect the state manually:\nif (outcome::result\u0026lt;string\u0026gt; rslt = data_from_file(\u0026#34;config.cfg\u0026#34;)) use_string(rslt.value()); // returns string else throw LibError{rslt.error(), \u0026#34;config.cfg\u0026#34;}; // returns error_code View this code on Github Or, if this function is called in another function that also returns result\u0026lt;T\u0026gt;, you can use a dedicated control statement:\noutcome::result\u0026lt;int\u0026gt; process(const string\u0026amp; content) noexcept; outcome::result\u0026lt;int\u0026gt; int_from_file(string_view path) noexcept { OUTCOME_TRY(auto str, data_from_file(path)); // if control gets here data_from_file() has succeeded return process(str); // decltype(str) == string } View this code on Github OUTCOME_TRY is a control statement. If the returned result\u0026lt;T\u0026gt; object contains an error information, the enclosing function is immediately returned with result\u0026lt;U\u0026gt; containing the same failure information; otherwise an automatic object of type T is available in scope.\nSample usage (C) Equivalent to the C++ API: CXX_DECLARE_RESULT_SYSTEM(ident, T) declares the C type, thereafter CXX_RESULT_SYSTEM(ident) refers to it. You use it in the function\u0026rsquo;s return type:\nCXX_DECLARE_RESULT_SYSTEM(result_string, const char *) CXX_RESULT_SYSTEM(result_string) data_from_file(const char *path); View this code on Github It is possible to inspect the state manually:\nCXX_RESULT_SYSTEM(result_string) rslt = data_from_file(\u0026#34;config.cfg\u0026#34;); if(CXX_RESULT_HAS_VALUE(rslt)) use_string(rslt.value); // returns string else fprintf(stderr, \u0026#34;%s\\n\u0026#34;, outcome_status_code_message(\u0026amp;rslt.error)); View this code on Github Or, if this function is called in another function that also returns CXX_RESULT_SYSTEM(ident), you can use a dedicated control statement:\nCXX_DECLARE_RESULT_SYSTEM(result_int, int) CXX_RESULT_SYSTEM(result_int) process(const char *content); CXX_RESULT_SYSTEM(result_int) int_from_file(const char *path) { CXX_RESULT_SYSTEM_TRY(const char *str, result_int, /* cleanup on fail */, data_from_file(path)); // if control gets here data_from_file() has succeeded return process(str); // decltype(str) == string } View this code on Github The C Result is guaranteed to be layout identical to its C++ equivalent. Convenience conversion functions are available, but you can reinterpret cast too.\nThis library joined the Boost C++ libraries in the 1.70 release (Spring 2019). It can be grafted into much older Boost releases if desired.\n If you choose a C-compatible T and E type. [return] result\u0026lt;T\u0026gt; defaults to std::error_code for Standalone Outcome, and to boost::system::error_code for Boost.Outcome. You can mandate a choice using std_result\u0026lt;T\u0026gt; or boost_result\u0026lt;T\u0026gt;. [return] " }, { "uri": "https://ned14.github.io/outcome/tags/hooks/", diff --git a/index.xml b/index.xml index 83bd542508..a6c8d04228 100644 --- a/index.xml +++ b/index.xml @@ -5,7 +5,7 @@ https://ned14.github.io/outcome/ Recent content in Home on Outcome documentation Hugo -- gohugo.io - Fri, 18 Mar 2022 14:45:32 +0000 + Tue, 16 Jul 2024 21:33:35 +0100 @@ -71,6 +71,16 @@ struct abort_policy : outcome::policy::base { template &lt;classImpl&gt; C++ 17 &lt;system_error&gt;Boost.SystemProposed &lt;system_error2&gt; std::errc boost::system::errc experimental::errc (almost identical) std::error_category boost::system::error_category experimental::status_code_domain std::generic_category boost::system::generic_category experimental::generic_code_domain std::system_category boost::system::system_category One of: experimental::posix_code_domain (POSIX systems) experimental::win32_code_domain (Microsoft Windows) experimental::nt_code_domain (Microsoft Windows) Note that there are more precanned code categories though they require additional header inclusions: com_code, getaddrinfo_code. + + C system error results + https://ned14.github.io/outcome/experimental/c-api/from-c/system_code/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://ned14.github.io/outcome/experimental/c-api/from-c/system_code/ + In v2.2.11, C Result support went from second tier to first tier status, and now you can create, query and manipulate a subset of Result types entirely from within C by including &lt;outcome/experimental/result.h&gt;. +The subset supported are those result&lt;T, E&gt; which are a status_result&lt;T&gt; i.e. the E is hardcoded to experimental::error which is the type erased runtime polymorphic holder for any errored status_code whose payload is not bigger than an intptr_t. + + Coroutine TRY operation https://ned14.github.io/outcome/tutorial/essential/coroutines/try/ @@ -83,10 +93,10 @@ eager&lt;result&lt;std::string&gt;&gt; to_string(int x) { if(x & Define a custom code domain - https://ned14.github.io/outcome/experimental/worked-example/preamble/ + https://ned14.github.io/outcome/experimental/worked-example-long/preamble/ Mon, 01 Jan 0001 00:00:00 +0000 - https://ned14.github.io/outcome/experimental/worked-example/preamble/ + https://ned14.github.io/outcome/experimental/worked-example-long/preamble/ Firstly let&rsquo;s alias the experimental Outcome namespace into something less tedious to type, declare our custom status code type, and get started on defining the custom status code domain implementation. namespace outcome_e = OUTCOME_V2_NAMESPACE::experimental; // To define a `file_io_error` which participates in the P1028 world // of `std::error`, we must first declare, then define, a custom code // domain which extends `posix_code` (the std error coding for POSIX // failures). The following is fairly standard boilerplate for defining // a custom code domain. @@ -102,24 +112,23 @@ int a() { f(); g(); // don&#39;t call g() and further if f() fails return h - Keeping state - https://ned14.github.io/outcome/tutorial/advanced/hooks/keeping_state/ + Implicit construction + https://ned14.github.io/outcome/experimental/worked-example/implicit-construction/ Mon, 01 Jan 0001 00:00:00 +0000 - https://ned14.github.io/outcome/tutorial/advanced/hooks/keeping_state/ - The first thing we are going to need is somewhere to store the stack backtrace. We could take the easier route and simply store it into an allocated block and keep the pointer as a custom payload in a result&lt;T, std::pair&lt;error_code, std::unique_ptr&lt;stack_backtrace&gt;&gt;&gt; (see previous section on Custom payloads). But let us assume that we care so deeply about bounded execution times that ever calling malloc is unacceptable. -We therefore are going to need some completely static and trivially typed storage perhaps kept per-thread to avoid the need to keep mutexes. + https://ned14.github.io/outcome/experimental/worked-example/implicit-construction/ + The preceding code had the compiler stamp out a custom status code domain for a user supplied enum. You now get the following types: +// This is the status code generated for your custom enum type. It will implicitly construct from // values of enum custom_failure. using custom_failure_code = SYSTEM_ERROR2_NAMESPACE::quick_status_code_from_enum_code&lt;custom_failure&gt;; namespace outcome_e = OUTCOME_V2_NAMESPACE::experimental; // You don&#39;t usually need to use the status code type explicitly, because this &#34;just works&#34;: outcome_e::status_result&lt;int&gt; positive_only(int x) { if(x &lt; 0) { // Outcome&#39;s result sees that status_code will implicitly construct from this enum, // and it returns an errored result return custom_failure::bad_argument; } return x; } // Semantic comparisons work bool test(int x) { if(auto r = positive_only(x); ! - Limitations - https://ned14.github.io/outcome/experimental/c-api/limitations/ + Keeping state + https://ned14.github.io/outcome/tutorial/advanced/hooks/keeping_state/ Mon, 01 Jan 0001 00:00:00 +0000 - https://ned14.github.io/outcome/experimental/c-api/limitations/ - C++ has excellent two-way compatibility with the C ABI, but there are some limitations you must observe to write C++ code which C code can call without marshalling at the ABI boundary: - A C++ function may not throw exceptions if it is safe to call from C, and so should always be marked noexcept. - A C++ function should be annotated with extern &quot;C&quot; to prevent its symbol being mangled, and thus give it the C rather than C++ ABI. + https://ned14.github.io/outcome/tutorial/advanced/hooks/keeping_state/ + The first thing we are going to need is somewhere to store the stack backtrace. We could take the easier route and simply store it into an allocated block and keep the pointer as a custom payload in a result&lt;T, std::pair&lt;error_code, std::unique_ptr&lt;stack_backtrace&gt;&gt;&gt; (see previous section on Custom payloads). But let us assume that we care so deeply about bounded execution times that ever calling malloc is unacceptable. +We therefore are going to need some completely static and trivially typed storage perhaps kept per-thread to avoid the need to keep mutexes. @@ -216,12 +225,21 @@ As bad as this may sound, it generates the most optimal code, and such hard UB i eager&lt;T, Executor = void&gt; An eagerly evaluated Coroutine: invoking co_await upon a function returning one of these immediately begins the execution of the function now. If the function never suspends, the overhead is similar to calling an ordinary function. + + Declare a Result + https://ned14.github.io/outcome/experimental/c-api/from-c/declare/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://ned14.github.io/outcome/experimental/c-api/from-c/declare/ + // Declare to C a Result with a happy value of intptr_t CXX_DECLARE_RESULT_SYSTEM(result_int, intptr_t) // Save oneself typing out CXX_RESULT_SYSTEM(result_int) all the time typedef CXX_RESULT_SYSTEM(result_int) result; // Our custom C enum enum c_enum { c_enum_not_found, c_enum_bad_argument }; // Make a custom status code domain for this C enum CXX_DECLARE_RESULT_SYSTEM_FROM_ENUM(result_int, // The C Result type declared above c_enum, // The C enum we wish to wrap &#34;{74ceb994-7622-3a21-07f0-b016aa705585}&#34;, // Unique UUID for this domain // Mappings of C enum values to textual description and semantic equivalances to generic codes {c_enum::c_enum_not_found, &#34;item not found&#34;, {errc::no_such_file_or_directory}}, {c_enum::c_enum_bad_argument, &#34;invoked wrong&#34;, {errc::invalid_argument}}) // Make helper macros #define SUCCESS(v) CXX_MAKE_RESULT_SYSTEM_SUCCESS(result_int, (v)) #define FAILURE(v) CXX_MAKE_RESULT_SYSTEM_FROM_ENUM(result_int, c_enum, (v)) View this code on Github The key to making C programming easy is to alias the long complex things into short easy thing. + + Example C++ function - https://ned14.github.io/outcome/experimental/c-api/example/ + https://ned14.github.io/outcome/experimental/c-api/from-cxx/example/ Mon, 01 Jan 0001 00:00:00 +0000 - https://ned14.github.io/outcome/experimental/c-api/example/ + https://ned14.github.io/outcome/experimental/c-api/from-cxx/example/ Let us start with a simple C++ function which we wish to make available to C code: namespace outcome_e = OUTCOME_V2_NAMESPACE::experimental; // Fill the supplied buffer with the integer v converted to a string, // returning length of string minus null terminator outcome_e::status_result&lt;size_t&gt; to_string(char *buffer, size_t bufferlen, int v) noexcept { try { // Could throw an exception! std::string temp(std::to_string(v)); // Will this string exceed the supplied buffer? if(temp. @@ -259,10 +277,10 @@ outcome::result&lt;void&gt; print_half(const std::string&amp; text); The payload - https://ned14.github.io/outcome/experimental/worked-example/value_type/ + https://ned14.github.io/outcome/experimental/worked-example-long/value_type/ Mon, 01 Jan 0001 00:00:00 +0000 - https://ned14.github.io/outcome/experimental/worked-example/value_type/ + https://ned14.github.io/outcome/experimental/worked-example-long/value_type/ We define the code domain&rsquo;s value_type &ndash; the payload to be transported by status codes using this code domain &ndash; to be a POSIX errno value, an integer line number and a const char pointer. public: // This is the value type for `file_io_error`. We add line number and source file path. struct value_type { typename outcome_e::posix_code::value_type errcode; // from POSIX, as we inherit from _posix_code_domain // Our additional payload int lineno; // from __LINE__ const char *file; // from __FILE__ // Could also place a backtrace of void *[16] here . @@ -329,12 +347,12 @@ Seeing as we are replacing the throwing overload of copy_file() in the Filesyste Calling it from C - https://ned14.github.io/outcome/experimental/c-api/example2/ + https://ned14.github.io/outcome/experimental/c-api/from-cxx/example2/ Mon, 01 Jan 0001 00:00:00 +0000 - https://ned14.github.io/outcome/experimental/c-api/example2/ + https://ned14.github.io/outcome/experimental/c-api/from-cxx/example2/ Firstly we need to declare to C our result returning C++ function: -// Declare our C++ function&#39;s returning result type. Only needs to be done once. // This declares an `status_result&lt;size_t, system_code&gt;` which is an alias to // `basic_result&lt;size_t, status_code&lt;erased&lt;intptr_t&gt;&gt;&gt;`. // // The first parameter is some unique identifier for this type which will be used // whenever we reference this type in the future. CXX_DECLARE_RESULT_SYSTEM(to_string_rettype, size_t); // Tell C about our extern C++ function `to_string()` extern CXX_RESULT_SYSTEM(to_string_rettype) _Z9to_stringPcmi(char *buffer, size_t bufferlen, int v); View this code on Github Now let&rsquo;s call the C++ function from C: +// Declare our C++ function&#39;s returning result type. Only needs to be done once. // This declares an `status_result&lt;size_t, system_code&gt;` which is an alias to // `basic_result&lt;size_t, status_code&lt;erased&lt;intptr_t&gt;&gt;&gt;`. // // The first parameter is some unique identifier for this type which will be used // whenever we reference this type in the future. CXX_DECLARE_RESULT_SYSTEM(to_string_rettype, size_t) // Tell C about our extern C++ function `to_string()` extern CXX_RESULT_SYSTEM(to_string_rettype) _Z9to_stringPcmi(char *buffer, size_t bufferlen, int v); View this code on Github Now let&rsquo;s call the C++ function from C: @@ -410,14 +428,24 @@ auto __result = BigInt::fromString(text); if (!__result) return __result.as_fail The constructor - https://ned14.github.io/outcome/experimental/worked-example/constructor/ + https://ned14.github.io/outcome/experimental/worked-example-long/constructor/ Mon, 01 Jan 0001 00:00:00 +0000 - https://ned14.github.io/outcome/experimental/worked-example/constructor/ + https://ned14.github.io/outcome/experimental/worked-example-long/constructor/ Code domains are 100% constexpr to construct and destruct, as are status codes. This enables the compiler to 100% instantiate both only in its mind, and to emit zero code and thus zero overhead. Unfortunately it also means that it must be possible for each domain to be instantiated an infinite number of times, and being 100% in constexpr, any instances never have a unique address in memory either. Thus we cannot compare domains for equivalence using their address in memory, as std::error_category does. + + Using a Result + https://ned14.github.io/outcome/experimental/c-api/from-c/use/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://ned14.github.io/outcome/experimental/c-api/from-c/use/ + This models the earlier C++ example of use, and its C equivalent isn&rsquo;t much more verbose thanks to our helper typedefs and macros: +result positive_only(int x) { if(x &lt; 0) { return FAILURE(c_enum_bad_argument); } return SUCCESS(x); } bool test(int x) { result r = positive_only(x); if(CXX_RESULT_HAS_ERROR(r)) { if(outcome_status_code_equal_generic(&amp;r.error, EINVAL)) { fprintf(stderr, &#34;Positive numbers only!\n&#34;); return false; } } return true; } View this code on Github For this to link, the CXX_DECLARE_RESULT_SYSTEM_FROM_ENUM macro needs to be compiled at least once within C++ within the final binary to emit the extern functions needed by C. + + std expected https://ned14.github.io/outcome/alternatives/expected/ @@ -492,14 +520,24 @@ outcome::result&lt;file_handle&gt; fh2 = make&lt;file_handle&gt; String refs - https://ned14.github.io/outcome/experimental/worked-example/string_ref/ + https://ned14.github.io/outcome/experimental/worked-example-long/string_ref/ Mon, 01 Jan 0001 00:00:00 +0000 - https://ned14.github.io/outcome/experimental/worked-example/string_ref/ + https://ned14.github.io/outcome/experimental/worked-example-long/string_ref/ &lt;system_error2&gt; does not use std::string to return possibly statically or dynamically allocated strings, and thus avoids dragging in a lot of the standard library which impacts build times. Instead status code domains have a string_ref, which has a polymorphic implementation which may or may not manage a dynamic memory allocation using an atomic reference counter. Due to this polymorphism, you don&rsquo;t need to worry which implementation is actually in use under the bonnet when you pass around string_ref instances. + + TRY a C Result + https://ned14.github.io/outcome/experimental/c-api/from-c/try/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://ned14.github.io/outcome/experimental/c-api/from-c/try/ + Thanks to much of the magic of OUTCOME_TRY(var, expr) being implemented using C preprocessor metaprogramming, we can offer a very similar experience for the C try operation and without needing anything compiled in C++ as support functions: +result test2(int x) { CXX_RESULT_SYSTEM_TRY(int v, // what to set to value if successful fprintf(stderr, &#34;Positive numbers only!\n&#34;), // what cleanup to run if unsuccessful positive_only(x)); return SUCCESS(v + 1); } View this code on Github The principle difference is that you can specify a cleanup routine to perform if failure is encountered. + + TRY is greedy https://ned14.github.io/outcome/tutorial/essential/result/try_greedy/ @@ -553,16 +591,6 @@ classerror_code { error_category* domain; // domain from which the error origina namespace app { // Specialise an exception type for tidylib errors struct tidylib_error : std::system_error { // passthrough using std::system_error::system_error; tidylib_error() = default; explicit tidylib_error(int c) : std::system_error(c, std::generic_category()) { } }; // Create a C++ invoking wrapper for the tidylib C API, modifying data with the returned data, // returing a unique_ptr to release storage on scope exit. - - C Macro API Reference - https://ned14.github.io/outcome/experimental/c-api/reference/ - Mon, 01 Jan 0001 00:00:00 +0000 - - https://ned14.github.io/outcome/experimental/c-api/reference/ - The C macro API header &lt;outcome/experimental/result.h&gt; consists of these macros: - CXX_DECLARE_RESULT(ident, T, E) Declares to C a basic_result type uniquely identified by ident. T is available at the member variable .value, and E is available at the member variable .error. CXX_RESULT(ident) A reference to a previously declared result type with unique ident. CXX_RESULT_HAS_VALUE(r) Evaluates to 1 (true) if the input result has a value. CXX_RESULT_HAS_ERROR(r) Evaluates to 1 (true) if the input result has an error. - - Hook outcome https://ned14.github.io/outcome/tutorial/advanced/hooks/hook_outcome/ @@ -606,10 +634,10 @@ This section illustrates how you can hook into the std::error_code system from t Redefining `message()` - https://ned14.github.io/outcome/experimental/worked-example/message/ + https://ned14.github.io/outcome/experimental/worked-example-long/message/ Mon, 01 Jan 0001 00:00:00 +0000 - https://ned14.github.io/outcome/experimental/worked-example/message/ + https://ned14.github.io/outcome/experimental/worked-example-long/message/ You may remember that our custom _file_io_error_domain inherits from outcome_e::posix_code::domain_type, and thus does not have to implement the many pure virtual functions required by outcome_e::status_code_domain. What we do need to do is reimplement _do_message() to append the file and line information to the POSIX error description string returned by outcome_e::posix_code::domain_type. This causes the status code&rsquo;s .message() observer to return a string with the extra payload information represented in text. // Return a string describing a specific code. @@ -671,10 +699,10 @@ template&lt;class... Args&gt; inline outcome::result&lt;file_handle& Constexpr domain source - https://ned14.github.io/outcome/experimental/worked-example/source/ + https://ned14.github.io/outcome/experimental/worked-example-long/source/ Mon, 01 Jan 0001 00:00:00 +0000 - https://ned14.github.io/outcome/experimental/worked-example/source/ + https://ned14.github.io/outcome/experimental/worked-example-long/source/ Back in The constructor, we declared but did not implement a .get() function which returns a constexpr static instance of the domain. We implement this now: // 100% constexpr instantiation constexpr _file_io_error_domain file_io_error_domain; inline constexpr const _file_io_error_domain &amp;_file_io_error_domain::get() { return file_io_error_domain; } View this code on Github As this is 100% constexpr, it can be (and is under optimisation) implemented entirely in the mind of the compiler with no run time representation. @@ -691,10 +719,10 @@ template&lt;class... Args&gt; inline outcome::result&lt;file_handle& Implicit conversion - https://ned14.github.io/outcome/experimental/worked-example/implicit_conversion/ + https://ned14.github.io/outcome/experimental/worked-example-long/implicit_conversion/ Mon, 01 Jan 0001 00:00:00 +0000 - https://ned14.github.io/outcome/experimental/worked-example/implicit_conversion/ + https://ned14.github.io/outcome/experimental/worked-example-long/implicit_conversion/ Back in The payload, we mentioned that there was no default implicit conversion of file_io_error (status_code&lt;_file_io_error_domain&gt;) to error, as error is too small to hold _file_io_error_domain::value_type. We can tell the framework about available implicit conversions by defining an ADL discovered free function make_status_code() which takes our custom status code as input, and returns an error: // Now tell `error` how it can implicitly construct from `file_io_error`. // This is done by us defining a free function called `make_status_code()` // which is discovered using ADL. diff --git a/motivation/errno/index.html b/motivation/errno/index.html index 2928bcacec..e6afb5c508 100644 --- a/motivation/errno/index.html +++ b/motivation/errno/index.html @@ -5,7 +5,7 @@ - + errno :: Outcome documentation @@ -598,108 +598,153 @@ status_result and status_outcome + +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/motivation/error_codes/index.html b/motivation/error_codes/index.html index 28d7502f99..e6904f1ce2 100644 --- a/motivation/error_codes/index.html +++ b/motivation/error_codes/index.html @@ -5,7 +5,7 @@ - + Error codes :: Outcome documentation @@ -598,108 +598,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/motivation/exceptions/index.html b/motivation/exceptions/index.html index 82780c63d9..7119cc2733 100644 --- a/motivation/exceptions/index.html +++ b/motivation/exceptions/index.html @@ -5,7 +5,7 @@ - + Exceptions :: Outcome documentation @@ -598,108 +598,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/motivation/index.html b/motivation/index.html index 0dae6e3d53..2ddbea7782 100644 --- a/motivation/index.html +++ b/motivation/index.html @@ -5,7 +5,7 @@ - + Motivation :: Outcome documentation @@ -598,108 +598,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/motivation/narrow_contract/index.html b/motivation/narrow_contract/index.html index 81cb6be56c..ccfb73412d 100644 --- a/motivation/narrow_contract/index.html +++ b/motivation/narrow_contract/index.html @@ -5,7 +5,7 @@ - + Narrow contracts :: Outcome documentation @@ -598,108 +598,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/motivation/plug_error_code/index.html b/motivation/plug_error_code/index.html index 44d4baaa05..5edb4aba8c 100644 --- a/motivation/plug_error_code/index.html +++ b/motivation/plug_error_code/index.html @@ -5,7 +5,7 @@ - + Plugging a library into `std::error_code` :: Outcome documentation @@ -598,108 +598,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/motivation/plug_error_code2/index.html b/motivation/plug_error_code2/index.html index 095f125755..1edb835b08 100644 --- a/motivation/plug_error_code2/index.html +++ b/motivation/plug_error_code2/index.html @@ -5,7 +5,7 @@ - + Plugging a library into `boost::system::error_code` :: Outcome documentation @@ -598,108 +598,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/motivation/std_error_code/index.html b/motivation/std_error_code/index.html index 6c953f2b2a..b426e6632b 100644 --- a/motivation/std_error_code/index.html +++ b/motivation/std_error_code/index.html @@ -5,7 +5,7 @@ - + std::error_code :: Outcome documentation @@ -598,108 +598,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/recipes/asio-integration-1-70/index.html b/recipes/asio-integration-1-70/index.html index 8e8e918ca4..9c2291bc5e 100644 --- a/recipes/asio-integration-1-70/index.html +++ b/recipes/asio-integration-1-70/index.html @@ -5,7 +5,7 @@ - + ASIO/Networking TS: Boost >= 1.70 :: Outcome documentation @@ -598,108 +598,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/recipes/asio-integration/index.html b/recipes/asio-integration/index.html index 3031c1ae21..963560e399 100644 --- a/recipes/asio-integration/index.html +++ b/recipes/asio-integration/index.html @@ -5,7 +5,7 @@ - + ASIO/Networking TS : Boost < 1.70 :: Outcome documentation @@ -598,108 +598,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/recipes/foreign-try/index.html b/recipes/foreign-try/index.html index 670669c813..311dac3e0c 100644 --- a/recipes/foreign-try/index.html +++ b/recipes/foreign-try/index.html @@ -5,7 +5,7 @@ - + Extending `OUTCOME_TRY` :: Outcome documentation @@ -598,108 +598,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/recipes/index.html b/recipes/index.html index ea2bf8afae..9b5bd44542 100644 --- a/recipes/index.html +++ b/recipes/index.html @@ -5,7 +5,7 @@ - + Recipes :: Outcome documentation @@ -598,108 +598,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/aliases/boost_checked/index.html b/reference/aliases/boost_checked/index.html index 4d473de825..9714feed7d 100644 --- a/reference/aliases/boost_checked/index.html +++ b/reference/aliases/boost_checked/index.html @@ -5,7 +5,7 @@ - + `boost_checked<T, E = boost::system::error_code>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • @@ -1853,440 +1898,6 @@ basic_result<T, E, NoValuePolicy>
  • diff --git a/reference/aliases/boost_outcome/index.html b/reference/aliases/boost_outcome/index.html index 75e23002d6..c42573a441 100644 --- a/reference/aliases/boost_outcome/index.html +++ b/reference/aliases/boost_outcome/index.html @@ -5,7 +5,7 @@ - + `boost_outcome<T, EC = boost::system::error_code, EP = boost::exception_ptr, NoValuePolicy = policy::default_policy<T, EC, EP>>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/aliases/boost_result/index.html b/reference/aliases/boost_result/index.html index b3dfdfcc80..76701c4451 100644 --- a/reference/aliases/boost_result/index.html +++ b/reference/aliases/boost_result/index.html @@ -5,7 +5,7 @@ - + `boost_result<T, E = boost::system::error_code, NoValuePolicy = policy::default_policy<T, E, void>>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/aliases/boost_unchecked/index.html b/reference/aliases/boost_unchecked/index.html index a6404c4876..b5b462836a 100644 --- a/reference/aliases/boost_unchecked/index.html +++ b/reference/aliases/boost_unchecked/index.html @@ -5,7 +5,7 @@ - + `boost_unchecked<T, E = boost::system::error_code>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/aliases/checked/index.html b/reference/aliases/checked/index.html index d380c170f7..0603272614 100644 --- a/reference/aliases/checked/index.html +++ b/reference/aliases/checked/index.html @@ -5,7 +5,7 @@ - + `checked<T, E = varies>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/aliases/default_policy/index.html b/reference/aliases/default_policy/index.html index 2464740012..53293dbad9 100644 --- a/reference/aliases/default_policy/index.html +++ b/reference/aliases/default_policy/index.html @@ -5,7 +5,7 @@ - + `default_policy<T, EC, EP>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/aliases/index.html b/reference/aliases/index.html index f2ac0147fa..f10e3e8a30 100644 --- a/reference/aliases/index.html +++ b/reference/aliases/index.html @@ -5,7 +5,7 @@ - + Aliases :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/aliases/outcome/index.html b/reference/aliases/outcome/index.html index f7ae3f919d..c5a86168f6 100644 --- a/reference/aliases/outcome/index.html +++ b/reference/aliases/outcome/index.html @@ -5,7 +5,7 @@ - + `outcome<T, EC = varies, EP = varies, NoValuePolicy = policy::default_policy<T, EC, EP>>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/aliases/result/index.html b/reference/aliases/result/index.html index 8afee7a588..47cb719968 100644 --- a/reference/aliases/result/index.html +++ b/reference/aliases/result/index.html @@ -5,7 +5,7 @@ - + `result<T, E = varies, NoValuePolicy = policy::default_policy<T, E, void>>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/aliases/std_checked/index.html b/reference/aliases/std_checked/index.html index 48b1a902ce..b1268c3d7c 100644 --- a/reference/aliases/std_checked/index.html +++ b/reference/aliases/std_checked/index.html @@ -5,7 +5,7 @@ - + `std_checked<T, E = std::error_code>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/aliases/std_outcome/index.html b/reference/aliases/std_outcome/index.html index d096566ee6..b5fde7a906 100644 --- a/reference/aliases/std_outcome/index.html +++ b/reference/aliases/std_outcome/index.html @@ -5,7 +5,7 @@ - + `std_outcome<T, EC = std::error_code, EP = std::exception_ptr, NoValuePolicy = policy::default_policy<T, EC, EP>>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/aliases/std_result/index.html b/reference/aliases/std_result/index.html index c83fdc3b6c..4e9a02edbf 100644 --- a/reference/aliases/std_result/index.html +++ b/reference/aliases/std_result/index.html @@ -5,7 +5,7 @@ - + `std_result<T, E = std::error_code, NoValuePolicy = policy::default_policy<T, E, void>>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/aliases/std_unchecked/index.html b/reference/aliases/std_unchecked/index.html index c2026df489..b70ae104dc 100644 --- a/reference/aliases/std_unchecked/index.html +++ b/reference/aliases/std_unchecked/index.html @@ -5,7 +5,7 @@ - + `std_unchecked<T, E = std::error_code>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/aliases/unchecked/index.html b/reference/aliases/unchecked/index.html index 095633f1ce..fbec180f16 100644 --- a/reference/aliases/unchecked/index.html +++ b/reference/aliases/unchecked/index.html @@ -5,7 +5,7 @@ - + `unchecked<T, E = varies>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/concepts/basic_outcome/index.html b/reference/concepts/basic_outcome/index.html index 81463fb65e..84da54a29a 100644 --- a/reference/concepts/basic_outcome/index.html +++ b/reference/concepts/basic_outcome/index.html @@ -5,7 +5,7 @@ - + `basic_outcome<T>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/concepts/basic_result/index.html b/reference/concepts/basic_result/index.html index d55618ef74..0fd26ae00e 100644 --- a/reference/concepts/basic_result/index.html +++ b/reference/concepts/basic_result/index.html @@ -5,7 +5,7 @@ - + `basic_result<T>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/concepts/index.html b/reference/concepts/index.html index df0822ab1d..cb507e7a63 100644 --- a/reference/concepts/index.html +++ b/reference/concepts/index.html @@ -5,7 +5,7 @@ - + Concepts :: Outcome documentation @@ -317,220 +317,6 @@ Advanced
  • @@ -597,108 +383,153 @@ status_result and status_outcome + +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/concepts/value_or_error/index.html b/reference/concepts/value_or_error/index.html index 62822de790..239c81d4bd 100644 --- a/reference/concepts/value_or_error/index.html +++ b/reference/concepts/value_or_error/index.html @@ -5,7 +5,7 @@ - + `value_or_error<T>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/concepts/value_or_none/index.html b/reference/concepts/value_or_none/index.html index cc3f440dc1..7e270fea1b 100644 --- a/reference/concepts/value_or_none/index.html +++ b/reference/concepts/value_or_none/index.html @@ -5,7 +5,7 @@ - + `value_or_none<T>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/converters/index.html b/reference/converters/index.html index 9743f30cff..5d440216c6 100644 --- a/reference/converters/index.html +++ b/reference/converters/index.html @@ -5,7 +5,7 @@ - + Converters :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/converters/value_or_error/index.html b/reference/converters/value_or_error/index.html index e0548c546c..bc4df5cacd 100644 --- a/reference/converters/value_or_error/index.html +++ b/reference/converters/value_or_error/index.html @@ -5,7 +5,7 @@ - + `value_or_error<T, U>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/error_from_exception/index.html b/reference/functions/error_from_exception/index.html index 16e5f877ad..1a8c5389b8 100644 --- a/reference/functions/error_from_exception/index.html +++ b/reference/functions/error_from_exception/index.html @@ -5,7 +5,7 @@ - + `std::error_code error_from_exception(std::exception_ptr &&ep = std::current_exception(), std::error_code not_matched = std::make_error_code(std::errc::resource_unavailable_try_again)) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/failure/index.html b/reference/functions/failure/index.html index 305bae108e..815b49905e 100644 --- a/reference/functions/failure/index.html +++ b/reference/functions/failure/index.html @@ -5,7 +5,7 @@ - + `auto failure(T &&, ...)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/hooks/hook_outcome_construction/index.html b/reference/functions/hooks/hook_outcome_construction/index.html index 0bcdd90bb8..627bb3f6a4 100644 --- a/reference/functions/hooks/hook_outcome_construction/index.html +++ b/reference/functions/hooks/hook_outcome_construction/index.html @@ -5,7 +5,7 @@ - + `void hook_outcome_construction(T *, U &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/hooks/hook_outcome_construction2/index.html b/reference/functions/hooks/hook_outcome_construction2/index.html index 1b1f3dc7c2..0cafc2c082 100644 --- a/reference/functions/hooks/hook_outcome_construction2/index.html +++ b/reference/functions/hooks/hook_outcome_construction2/index.html @@ -5,7 +5,7 @@ - + `void hook_outcome_construction(T *, U &&, V &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/hooks/hook_outcome_copy_construction/index.html b/reference/functions/hooks/hook_outcome_copy_construction/index.html index 684a168423..2ad5a70b3f 100644 --- a/reference/functions/hooks/hook_outcome_copy_construction/index.html +++ b/reference/functions/hooks/hook_outcome_copy_construction/index.html @@ -5,7 +5,7 @@ - + `void hook_outcome_copy_construction(T *, U &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/hooks/hook_outcome_copy_construction2/index.html b/reference/functions/hooks/hook_outcome_copy_construction2/index.html index e91faa4b06..091a8eb05c 100644 --- a/reference/functions/hooks/hook_outcome_copy_construction2/index.html +++ b/reference/functions/hooks/hook_outcome_copy_construction2/index.html @@ -5,7 +5,7 @@ - + `void hook_outcome_copy_construction(T *, U &&, V &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/hooks/hook_outcome_in_place_construction/index.html b/reference/functions/hooks/hook_outcome_in_place_construction/index.html index 28de12945b..3ae414b8ac 100644 --- a/reference/functions/hooks/hook_outcome_in_place_construction/index.html +++ b/reference/functions/hooks/hook_outcome_in_place_construction/index.html @@ -5,7 +5,7 @@ - + `void hook_outcome_in_place_construction(T *, in_place_type_t<U>, Args &&...) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/hooks/hook_outcome_move_construction/index.html b/reference/functions/hooks/hook_outcome_move_construction/index.html index 9a92b626ad..ec5905ee43 100644 --- a/reference/functions/hooks/hook_outcome_move_construction/index.html +++ b/reference/functions/hooks/hook_outcome_move_construction/index.html @@ -5,7 +5,7 @@ - + `void hook_outcome_move_construction(T *, U &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/hooks/hook_outcome_move_construction2/index.html b/reference/functions/hooks/hook_outcome_move_construction2/index.html index 1a2015c949..940d11235d 100644 --- a/reference/functions/hooks/hook_outcome_move_construction2/index.html +++ b/reference/functions/hooks/hook_outcome_move_construction2/index.html @@ -5,7 +5,7 @@ - + `void hook_outcome_move_construction(T *, U &&, V &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/hooks/hook_result_construction/index.html b/reference/functions/hooks/hook_result_construction/index.html index b46cca74e2..571745f272 100644 --- a/reference/functions/hooks/hook_result_construction/index.html +++ b/reference/functions/hooks/hook_result_construction/index.html @@ -5,7 +5,7 @@ - + `void hook_result_construction(T *, U &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/hooks/hook_result_copy_construction/index.html b/reference/functions/hooks/hook_result_copy_construction/index.html index a1f6cabe22..330a2adc14 100644 --- a/reference/functions/hooks/hook_result_copy_construction/index.html +++ b/reference/functions/hooks/hook_result_copy_construction/index.html @@ -5,7 +5,7 @@ - + `void hook_result_copy_construction(T *, U &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/hooks/hook_result_in_place_construction/index.html b/reference/functions/hooks/hook_result_in_place_construction/index.html index ac1ab620b1..9be8522bbd 100644 --- a/reference/functions/hooks/hook_result_in_place_construction/index.html +++ b/reference/functions/hooks/hook_result_in_place_construction/index.html @@ -5,7 +5,7 @@ - + `void hook_result_in_place_construction(T *, in_place_type_t<U>, Args &&...) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/hooks/hook_result_move_construction/index.html b/reference/functions/hooks/hook_result_move_construction/index.html index a752d68e86..c28fe2a29c 100644 --- a/reference/functions/hooks/hook_result_move_construction/index.html +++ b/reference/functions/hooks/hook_result_move_construction/index.html @@ -5,7 +5,7 @@ - + `void hook_result_move_construction(T *, U &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/hooks/index.html b/reference/functions/hooks/index.html index cc4deaa5d5..44264d7d49 100644 --- a/reference/functions/hooks/index.html +++ b/reference/functions/hooks/index.html @@ -5,7 +5,7 @@ - + Hooks :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/hooks/override_outcome_exception/index.html b/reference/functions/hooks/override_outcome_exception/index.html index f576aecad5..575107daba 100644 --- a/reference/functions/hooks/override_outcome_exception/index.html +++ b/reference/functions/hooks/override_outcome_exception/index.html @@ -5,7 +5,7 @@ - + `void override_outcome_exception(basic_outcome<T, EC, EP, NoValuePolicy> *, U &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/hooks/set_spare_storage/index.html b/reference/functions/hooks/set_spare_storage/index.html index 0a71076d18..697addb246 100644 --- a/reference/functions/hooks/set_spare_storage/index.html +++ b/reference/functions/hooks/set_spare_storage/index.html @@ -5,7 +5,7 @@ - + `void set_spare_storage(basic_result|basic_outcome *, uint16_t) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/hooks/spare_storage/index.html b/reference/functions/hooks/spare_storage/index.html index 199263ee8e..1202e82f75 100644 --- a/reference/functions/hooks/spare_storage/index.html +++ b/reference/functions/hooks/spare_storage/index.html @@ -5,7 +5,7 @@ - + `uint16_t spare_storage(const basic_result|basic_outcome *) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/index.html b/reference/functions/index.html index 739cf18a2a..bccbdd6013 100644 --- a/reference/functions/index.html +++ b/reference/functions/index.html @@ -5,7 +5,7 @@ - + Functions :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/iostream/index.html b/reference/functions/iostream/index.html index 85c0e3761d..d0131d3127 100644 --- a/reference/functions/iostream/index.html +++ b/reference/functions/iostream/index.html @@ -5,7 +5,7 @@ - + Iostream :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/iostream/outcome_operator_in/index.html b/reference/functions/iostream/outcome_operator_in/index.html index 8cab4b10e3..e160c0ed62 100644 --- a/reference/functions/iostream/outcome_operator_in/index.html +++ b/reference/functions/iostream/outcome_operator_in/index.html @@ -5,7 +5,7 @@ - + `std::istream &operator>>(std::istream &, basic_outcome<T, EC, EP, NoValuePolicy> &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/iostream/outcome_operator_out/index.html b/reference/functions/iostream/outcome_operator_out/index.html index eecb7d7b32..30d1a946b0 100644 --- a/reference/functions/iostream/outcome_operator_out/index.html +++ b/reference/functions/iostream/outcome_operator_out/index.html @@ -5,7 +5,7 @@ - + `std::ostream &operator<<(std::ostream &, const basic_outcome<T, EC, EP, NoValuePolicy> &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/iostream/outcome_print/index.html b/reference/functions/iostream/outcome_print/index.html index 0483ad70de..fb55f6105f 100644 --- a/reference/functions/iostream/outcome_print/index.html +++ b/reference/functions/iostream/outcome_print/index.html @@ -5,7 +5,7 @@ - + `std::string print(const basic_outcome<T, EC, EP, NoValuePolicy> &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/iostream/result_operator_in/index.html b/reference/functions/iostream/result_operator_in/index.html index b2c33b8872..ccde3c5327 100644 --- a/reference/functions/iostream/result_operator_in/index.html +++ b/reference/functions/iostream/result_operator_in/index.html @@ -5,7 +5,7 @@ - + `std::istream &operator>>(std::istream &, basic_result<T, E, NoValuePolicy> &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/iostream/result_operator_out/index.html b/reference/functions/iostream/result_operator_out/index.html index 9ecd4bdc7a..befa747624 100644 --- a/reference/functions/iostream/result_operator_out/index.html +++ b/reference/functions/iostream/result_operator_out/index.html @@ -5,7 +5,7 @@ - + `std::ostream &operator<<(std::ostream &, const basic_result<T, E, NoValuePolicy> &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/iostream/result_print/index.html b/reference/functions/iostream/result_print/index.html index 836539895b..41a415c24d 100644 --- a/reference/functions/iostream/result_print/index.html +++ b/reference/functions/iostream/result_print/index.html @@ -5,7 +5,7 @@ - + `std::string print(const basic_result<T, E, NoValuePolicy> &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/policy/basic_outcome_failure_exception_from_error/index.html b/reference/functions/policy/basic_outcome_failure_exception_from_error/index.html index e3f1fb3e48..f8768655aa 100644 --- a/reference/functions/policy/basic_outcome_failure_exception_from_error/index.html +++ b/reference/functions/policy/basic_outcome_failure_exception_from_error/index.html @@ -5,7 +5,7 @@ - + `auto basic_outcome_failure_exception_from_error(const EC &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/policy/error_code/index.html b/reference/functions/policy/error_code/index.html index c9217e248a..4d5c09bf75 100644 --- a/reference/functions/policy/error_code/index.html +++ b/reference/functions/policy/error_code/index.html @@ -5,7 +5,7 @@ - + `decltype(auto) error_code(T &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/policy/exception_ptr/index.html b/reference/functions/policy/exception_ptr/index.html index b74b076ab5..af19994e4c 100644 --- a/reference/functions/policy/exception_ptr/index.html +++ b/reference/functions/policy/exception_ptr/index.html @@ -5,7 +5,7 @@ - + `decltype(auto) exception_ptr(T &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/policy/index.html b/reference/functions/policy/index.html index 28f49f050d..56b70381ae 100644 --- a/reference/functions/policy/index.html +++ b/reference/functions/policy/index.html @@ -5,7 +5,7 @@ - + Policy :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/policy/outcome_throw_as_system_error_with_payload_boost_enum/index.html b/reference/functions/policy/outcome_throw_as_system_error_with_payload_boost_enum/index.html index 90943c3f14..2973c4e99a 100644 --- a/reference/functions/policy/outcome_throw_as_system_error_with_payload_boost_enum/index.html +++ b/reference/functions/policy/outcome_throw_as_system_error_with_payload_boost_enum/index.html @@ -5,7 +5,7 @@ - + `void outcome_throw_as_system_error_with_payload(BoostErrorCodeEnum &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/policy/outcome_throw_as_system_error_with_payload_boost_error_code/index.html b/reference/functions/policy/outcome_throw_as_system_error_with_payload_boost_error_code/index.html index 0a3919519d..d3e72ea277 100644 --- a/reference/functions/policy/outcome_throw_as_system_error_with_payload_boost_error_code/index.html +++ b/reference/functions/policy/outcome_throw_as_system_error_with_payload_boost_error_code/index.html @@ -5,7 +5,7 @@ - + `void outcome_throw_as_system_error_with_payload(const boost::system::error_code &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/policy/outcome_throw_as_system_error_with_payload_std_enum/index.html b/reference/functions/policy/outcome_throw_as_system_error_with_payload_std_enum/index.html index 05a2cb8487..51fc2252dd 100644 --- a/reference/functions/policy/outcome_throw_as_system_error_with_payload_std_enum/index.html +++ b/reference/functions/policy/outcome_throw_as_system_error_with_payload_std_enum/index.html @@ -5,7 +5,7 @@ - + `void outcome_throw_as_system_error_with_payload(ErrorCodeEnum &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/policy/outcome_throw_as_system_error_with_payload_std_error_code/index.html b/reference/functions/policy/outcome_throw_as_system_error_with_payload_std_error_code/index.html index e720d7ea4a..a80cd90904 100644 --- a/reference/functions/policy/outcome_throw_as_system_error_with_payload_std_error_code/index.html +++ b/reference/functions/policy/outcome_throw_as_system_error_with_payload_std_error_code/index.html @@ -5,7 +5,7 @@ - + `void outcome_throw_as_system_error_with_payload(const std::error_code &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/strong_swap/index.html b/reference/functions/strong_swap/index.html index 78824baa72..fe32f897b0 100644 --- a/reference/functions/strong_swap/index.html +++ b/reference/functions/strong_swap/index.html @@ -5,7 +5,7 @@ - + `void strong_swap(bool &all_good, T &a, T &b)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/success/index.html b/reference/functions/success/index.html index 0ec0566ce8..d66988cf58 100644 --- a/reference/functions/success/index.html +++ b/reference/functions/success/index.html @@ -5,7 +5,7 @@ - + `auto success(T &&, ...)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/try_operation_extract_value/index.html b/reference/functions/try_operation_extract_value/index.html index 56e981bded..ebf54a2a64 100644 --- a/reference/functions/try_operation_extract_value/index.html +++ b/reference/functions/try_operation_extract_value/index.html @@ -5,7 +5,7 @@ - + `decltype(auto) try_operation_extract_value(X)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/try_operation_has_value/index.html b/reference/functions/try_operation_has_value/index.html index b54d25a183..d1de3d489d 100644 --- a/reference/functions/try_operation_has_value/index.html +++ b/reference/functions/try_operation_has_value/index.html @@ -5,7 +5,7 @@ - + `bool try_operation_has_value(X)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/try_operation_return_as/index.html b/reference/functions/try_operation_return_as/index.html index 3914ffbfd3..80bce2f7c8 100644 --- a/reference/functions/try_operation_return_as/index.html +++ b/reference/functions/try_operation_return_as/index.html @@ -5,7 +5,7 @@ - + `decltype(auto) try_operation_return_as(X)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/functions/try_throw_std_exception_from_error/index.html b/reference/functions/try_throw_std_exception_from_error/index.html index c867c3bd27..9c0ce5fa2e 100644 --- a/reference/functions/try_throw_std_exception_from_error/index.html +++ b/reference/functions/try_throw_std_exception_from_error/index.html @@ -5,7 +5,7 @@ - + `void try_throw_std_exception_from_error(std::error_code ec, const std::string &msg = std::string{})` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/index.html b/reference/index.html index 13ef49f286..399e70c475 100644 --- a/reference/index.html +++ b/reference/index.html @@ -5,7 +5,7 @@ - + API reference :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • @@ -3055,7 +3100,7 @@

    API reference

    diff --git a/reference/macros/co_try/index.html b/reference/macros/co_try/index.html index 597b810964..1afcfc9976 100644 --- a/reference/macros/co_try/index.html +++ b/reference/macros/co_try/index.html @@ -5,7 +5,7 @@ - + `OUTCOME_CO_TRY(var, expr)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/macros/co_try_failure_likely/index.html b/reference/macros/co_try_failure_likely/index.html index f25e1d01a5..9735ab5966 100644 --- a/reference/macros/co_try_failure_likely/index.html +++ b/reference/macros/co_try_failure_likely/index.html @@ -5,7 +5,7 @@ - + `OUTCOME_CO_TRY_FAILURE_LIKELY(var, expr)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/macros/co_tryv/index.html b/reference/macros/co_tryv/index.html index ec8960ce8e..739555654c 100644 --- a/reference/macros/co_tryv/index.html +++ b/reference/macros/co_tryv/index.html @@ -5,7 +5,7 @@ - + `OUTCOME_CO_TRYV(expr)/OUTCOME_CO_TRY(expr)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/macros/co_tryv2/index.html b/reference/macros/co_tryv2/index.html index 8518ec139f..03da7c83f8 100644 --- a/reference/macros/co_tryv2/index.html +++ b/reference/macros/co_tryv2/index.html @@ -5,7 +5,7 @@ - + `OUTCOME_CO_TRYV2(spec, expr)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/macros/co_tryv2_failure_likely/index.html b/reference/macros/co_tryv2_failure_likely/index.html index 0069d9f5ac..92a39f4b38 100644 --- a/reference/macros/co_tryv2_failure_likely/index.html +++ b/reference/macros/co_tryv2_failure_likely/index.html @@ -5,7 +5,7 @@ - + `OUTCOME_CO_TRYV2_FAILURE_LIKELY(spec, expr)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/macros/co_tryv_failure_likely/index.html b/reference/macros/co_tryv_failure_likely/index.html index 46a8b01c29..6ab10b549d 100644 --- a/reference/macros/co_tryv_failure_likely/index.html +++ b/reference/macros/co_tryv_failure_likely/index.html @@ -5,7 +5,7 @@ - + `OUTCOME_CO_TRYV_FAILURE_LIKELY(expr)/OUTCOME_CO_TRY_FAILURE_LIKELY(expr)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/macros/co_tryx/index.html b/reference/macros/co_tryx/index.html index cc08288b33..08ec4d5ad7 100644 --- a/reference/macros/co_tryx/index.html +++ b/reference/macros/co_tryx/index.html @@ -5,7 +5,7 @@ - + `OUTCOME_CO_TRYX(expr)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/macros/co_tryx_failure_likely/index.html b/reference/macros/co_tryx_failure_likely/index.html index 73bb696028..f4f17b7b35 100644 --- a/reference/macros/co_tryx_failure_likely/index.html +++ b/reference/macros/co_tryx_failure_likely/index.html @@ -5,7 +5,7 @@ - + `OUTCOME_CO_TRYX_FAILURE_LIKELY(expr)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/macros/disable_execinfo/index.html b/reference/macros/disable_execinfo/index.html index bd4122c11c..8617129338 100644 --- a/reference/macros/disable_execinfo/index.html +++ b/reference/macros/disable_execinfo/index.html @@ -5,7 +5,7 @@ - + `OUTCOME_DISABLE_EXECINFO` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/macros/enable_legacy_support_for/index.html b/reference/macros/enable_legacy_support_for/index.html index c5924e7916..5946bd89f0 100644 --- a/reference/macros/enable_legacy_support_for/index.html +++ b/reference/macros/enable_legacy_support_for/index.html @@ -5,7 +5,7 @@ - + `OUTCOME_ENABLE_LEGACY_SUPPORT_FOR` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/macros/in_place_type/index.html b/reference/macros/in_place_type/index.html index ce5a785ab2..1c4a82f67f 100644 --- a/reference/macros/in_place_type/index.html +++ b/reference/macros/in_place_type/index.html @@ -5,7 +5,7 @@ - + `OUTCOME_USE_STD_IN_PLACE_TYPE` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/macros/index.html b/reference/macros/index.html index 44e85697e8..d812175745 100644 --- a/reference/macros/index.html +++ b/reference/macros/index.html @@ -5,7 +5,7 @@ - + Macros :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/macros/is_nothrow_swappable/index.html b/reference/macros/is_nothrow_swappable/index.html index ad4615cedb..31f0574791 100644 --- a/reference/macros/is_nothrow_swappable/index.html +++ b/reference/macros/is_nothrow_swappable/index.html @@ -5,7 +5,7 @@ - + `OUTCOME_USE_STD_IS_NOTHROW_SWAPPABLE` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/macros/nodiscard/index.html b/reference/macros/nodiscard/index.html index 8ffaae2c07..66ee9076f4 100644 --- a/reference/macros/nodiscard/index.html +++ b/reference/macros/nodiscard/index.html @@ -5,7 +5,7 @@ - + `OUTCOME_NODISCARD` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/macros/requires/index.html b/reference/macros/requires/index.html index a43ea8ec1e..8d074dbaa5 100644 --- a/reference/macros/requires/index.html +++ b/reference/macros/requires/index.html @@ -5,7 +5,7 @@ - + `OUTCOME_REQUIRES(...)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/macros/symbol_visible/index.html b/reference/macros/symbol_visible/index.html index 7e98855f39..4b6c454b2b 100644 --- a/reference/macros/symbol_visible/index.html +++ b/reference/macros/symbol_visible/index.html @@ -5,7 +5,7 @@ - + `OUTCOME_SYMBOL_VISIBLE` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/macros/template/index.html b/reference/macros/template/index.html index a1b1753d9d..68195769c4 100644 --- a/reference/macros/template/index.html +++ b/reference/macros/template/index.html @@ -5,7 +5,7 @@ - + Constrained template macros :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/macros/thread_local/index.html b/reference/macros/thread_local/index.html index f0371891df..9f2616437e 100644 --- a/reference/macros/thread_local/index.html +++ b/reference/macros/thread_local/index.html @@ -5,7 +5,7 @@ - + `OUTCOME_THREAD_LOCAL` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/macros/throw_exception/index.html b/reference/macros/throw_exception/index.html index 4bee91777b..650ce4986a 100644 --- a/reference/macros/throw_exception/index.html +++ b/reference/macros/throw_exception/index.html @@ -5,7 +5,7 @@ - + `OUTCOME_THROW_EXCEPTION(expr)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/macros/try/index.html b/reference/macros/try/index.html index 6449bcada9..d0bbd630ab 100644 --- a/reference/macros/try/index.html +++ b/reference/macros/try/index.html @@ -5,7 +5,7 @@ - + `OUTCOME_TRY(var, expr)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/macros/try_failure_likely/index.html b/reference/macros/try_failure_likely/index.html index 1a078913b0..a7371a71cc 100644 --- a/reference/macros/try_failure_likely/index.html +++ b/reference/macros/try_failure_likely/index.html @@ -5,7 +5,7 @@ - + `OUTCOME_TRY_FAILURE_LIKELY(var, expr)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/macros/tryv/index.html b/reference/macros/tryv/index.html index 1964b3539b..824f22735d 100644 --- a/reference/macros/tryv/index.html +++ b/reference/macros/tryv/index.html @@ -5,7 +5,7 @@ - + `OUTCOME_TRYV(expr)/OUTCOME_TRY(expr)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/macros/tryv2/index.html b/reference/macros/tryv2/index.html index 189d22be7c..e47824e78c 100644 --- a/reference/macros/tryv2/index.html +++ b/reference/macros/tryv2/index.html @@ -5,7 +5,7 @@ - + `OUTCOME_TRYV2(spec, expr)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/macros/tryv2_failure_likely/index.html b/reference/macros/tryv2_failure_likely/index.html index 313bb2b1b1..9783ef17fc 100644 --- a/reference/macros/tryv2_failure_likely/index.html +++ b/reference/macros/tryv2_failure_likely/index.html @@ -5,7 +5,7 @@ - + `OUTCOME_TRYV2_FAILURE_LIKELY(spec, expr)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/macros/tryv_failure_likely/index.html b/reference/macros/tryv_failure_likely/index.html index 01029cb033..e4f6fdb477 100644 --- a/reference/macros/tryv_failure_likely/index.html +++ b/reference/macros/tryv_failure_likely/index.html @@ -5,7 +5,7 @@ - + `OUTCOME_TRYV_FAILURE_LIKELY(expr)/OUTCOME_TRY_FAILURE_LIKELY(expr)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/macros/tryx/index.html b/reference/macros/tryx/index.html index e624a59fee..8d33023f08 100644 --- a/reference/macros/tryx/index.html +++ b/reference/macros/tryx/index.html @@ -5,7 +5,7 @@ - + `OUTCOME_TRYX(expr)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/macros/tryx_failure_likely/index.html b/reference/macros/tryx_failure_likely/index.html index e9c8a76bb8..b9228a7787 100644 --- a/reference/macros/tryx_failure_likely/index.html +++ b/reference/macros/tryx_failure_likely/index.html @@ -5,7 +5,7 @@ - + `OUTCOME_TRYX_FAILURE_LIKELY(expr)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/macros/version/index.html b/reference/macros/version/index.html index 9d1dc9d935..bdfa3049f7 100644 --- a/reference/macros/version/index.html +++ b/reference/macros/version/index.html @@ -5,7 +5,7 @@ - + Version macros :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/all_narrow/index.html b/reference/policies/all_narrow/index.html index b63ab617fc..7e82528ac8 100644 --- a/reference/policies/all_narrow/index.html +++ b/reference/policies/all_narrow/index.html @@ -5,7 +5,7 @@ - + `all_narrow` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/base/error/index.html b/reference/policies/base/error/index.html index 7a16defc85..45bb78fd06 100644 --- a/reference/policies/base/error/index.html +++ b/reference/policies/base/error/index.html @@ -5,7 +5,7 @@ - + `static auto &&_error(Impl &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/base/exception/index.html b/reference/policies/base/exception/index.html index fe6c08c6df..ae230e19bc 100644 --- a/reference/policies/base/exception/index.html +++ b/reference/policies/base/exception/index.html @@ -5,7 +5,7 @@ - + `static auto &&_exception(Impl &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/base/has_error/index.html b/reference/policies/base/has_error/index.html index 576b937c84..c881a177b0 100644 --- a/reference/policies/base/has_error/index.html +++ b/reference/policies/base/has_error/index.html @@ -5,7 +5,7 @@ - + `static bool _has_error(Impl &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/base/has_error_is_errno/index.html b/reference/policies/base/has_error_is_errno/index.html index cacbcc7501..994d7f1b70 100644 --- a/reference/policies/base/has_error_is_errno/index.html +++ b/reference/policies/base/has_error_is_errno/index.html @@ -5,7 +5,7 @@ - + `static bool _has_error_is_errno(Impl &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/base/has_exception/index.html b/reference/policies/base/has_exception/index.html index d63854720f..cbd277f447 100644 --- a/reference/policies/base/has_exception/index.html +++ b/reference/policies/base/has_exception/index.html @@ -5,7 +5,7 @@ - + `static bool _has_exception(Impl &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/base/has_value/index.html b/reference/policies/base/has_value/index.html index a7a790dd3a..b3d62f7d35 100644 --- a/reference/policies/base/has_value/index.html +++ b/reference/policies/base/has_value/index.html @@ -5,7 +5,7 @@ - + `static bool _has_value(Impl &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/base/index.html b/reference/policies/base/index.html index 0bd9da5f13..186b2ac5e7 100644 --- a/reference/policies/base/index.html +++ b/reference/policies/base/index.html @@ -5,7 +5,7 @@ - + `base` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/base/narrow_error_check/index.html b/reference/policies/base/narrow_error_check/index.html index 960c5415c8..d5944b81ca 100644 --- a/reference/policies/base/narrow_error_check/index.html +++ b/reference/policies/base/narrow_error_check/index.html @@ -5,7 +5,7 @@ - + `static void narrow_error_check(Impl &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/base/narrow_exception_check/index.html b/reference/policies/base/narrow_exception_check/index.html index 1ec4ccf51f..5458691a2d 100644 --- a/reference/policies/base/narrow_exception_check/index.html +++ b/reference/policies/base/narrow_exception_check/index.html @@ -5,7 +5,7 @@ - + `static void narrow_exception_check(Impl &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/base/narrow_value_check/index.html b/reference/policies/base/narrow_value_check/index.html index 2a969f56b9..8c496f7c95 100644 --- a/reference/policies/base/narrow_value_check/index.html +++ b/reference/policies/base/narrow_value_check/index.html @@ -5,7 +5,7 @@ - + `static void narrow_value_check(Impl &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/base/on_outcome_construction/index.html b/reference/policies/base/on_outcome_construction/index.html index b39dba487e..848d09e5ec 100644 --- a/reference/policies/base/on_outcome_construction/index.html +++ b/reference/policies/base/on_outcome_construction/index.html @@ -5,7 +5,7 @@ - + `static void on_outcome_construction(T *, U &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/base/on_outcome_construction2/index.html b/reference/policies/base/on_outcome_construction2/index.html index 3f0a825f31..0889e3379f 100644 --- a/reference/policies/base/on_outcome_construction2/index.html +++ b/reference/policies/base/on_outcome_construction2/index.html @@ -5,7 +5,7 @@ - + `static void on_outcome_construction(T *, U &&, V &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/base/on_outcome_copy_construction/index.html b/reference/policies/base/on_outcome_copy_construction/index.html index f865aca808..eb26be5952 100644 --- a/reference/policies/base/on_outcome_copy_construction/index.html +++ b/reference/policies/base/on_outcome_copy_construction/index.html @@ -5,7 +5,7 @@ - + `static void on_outcome_copy_construction(T *, U &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/base/on_outcome_copy_construction2/index.html b/reference/policies/base/on_outcome_copy_construction2/index.html index 5cdbf308f1..4814a60332 100644 --- a/reference/policies/base/on_outcome_copy_construction2/index.html +++ b/reference/policies/base/on_outcome_copy_construction2/index.html @@ -5,7 +5,7 @@ - + `static void on_outcome_copy_construction(T *, U &&, V &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/base/on_outcome_in_place_construction/index.html b/reference/policies/base/on_outcome_in_place_construction/index.html index ff2eb8eff1..f27a7b6584 100644 --- a/reference/policies/base/on_outcome_in_place_construction/index.html +++ b/reference/policies/base/on_outcome_in_place_construction/index.html @@ -5,7 +5,7 @@ - + `static void on_outcome_in_place_construction(T *, in_place_type_t<U>, Args &&...) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/base/on_outcome_move_construction/index.html b/reference/policies/base/on_outcome_move_construction/index.html index 6abaa36a58..b673bdccd1 100644 --- a/reference/policies/base/on_outcome_move_construction/index.html +++ b/reference/policies/base/on_outcome_move_construction/index.html @@ -5,7 +5,7 @@ - + `static void on_outcome_move_construction(T *, U &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/base/on_outcome_move_construction2/index.html b/reference/policies/base/on_outcome_move_construction2/index.html index 6103379791..52d6ad087a 100644 --- a/reference/policies/base/on_outcome_move_construction2/index.html +++ b/reference/policies/base/on_outcome_move_construction2/index.html @@ -5,7 +5,7 @@ - + `static void on_outcome_move_construction(T *, U &&, V &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/base/on_result_construction/index.html b/reference/policies/base/on_result_construction/index.html index 157688f6dd..2a7c21933f 100644 --- a/reference/policies/base/on_result_construction/index.html +++ b/reference/policies/base/on_result_construction/index.html @@ -5,7 +5,7 @@ - + `static void on_result_construction(T *, U &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/base/on_result_copy_construction/index.html b/reference/policies/base/on_result_copy_construction/index.html index 055155652b..4ad7f7808f 100644 --- a/reference/policies/base/on_result_copy_construction/index.html +++ b/reference/policies/base/on_result_copy_construction/index.html @@ -5,7 +5,7 @@ - + `static void on_result_copy_construction(T *, U &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/base/on_result_in_place_construction/index.html b/reference/policies/base/on_result_in_place_construction/index.html index e1c593c4e5..782155b159 100644 --- a/reference/policies/base/on_result_in_place_construction/index.html +++ b/reference/policies/base/on_result_in_place_construction/index.html @@ -5,7 +5,7 @@ - + `static void on_result_in_place_construction(T *, in_place_type_t<U>, Args &&...) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/base/on_result_move_construction/index.html b/reference/policies/base/on_result_move_construction/index.html index e257ed39bc..27dcca77c9 100644 --- a/reference/policies/base/on_result_move_construction/index.html +++ b/reference/policies/base/on_result_move_construction/index.html @@ -5,7 +5,7 @@ - + `static void on_result_move_construction(T *, U &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/base/set_has_error/index.html b/reference/policies/base/set_has_error/index.html index 8ee9daad83..88920d881a 100644 --- a/reference/policies/base/set_has_error/index.html +++ b/reference/policies/base/set_has_error/index.html @@ -5,7 +5,7 @@ - + `static void _set_has_error(Impl &&, bool) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/base/set_has_error_is_errno/index.html b/reference/policies/base/set_has_error_is_errno/index.html index 06aeffee4d..f33a2496de 100644 --- a/reference/policies/base/set_has_error_is_errno/index.html +++ b/reference/policies/base/set_has_error_is_errno/index.html @@ -5,7 +5,7 @@ - + `static void _set_has_exception(Impl &&, bool) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/base/set_has_exception/index.html b/reference/policies/base/set_has_exception/index.html index 730853b8a0..144ee8e87b 100644 --- a/reference/policies/base/set_has_exception/index.html +++ b/reference/policies/base/set_has_exception/index.html @@ -5,7 +5,7 @@ - + `static void _set_has_exception(Impl &&, bool) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/base/set_has_value/index.html b/reference/policies/base/set_has_value/index.html index ef644463b9..e129cb38be 100644 --- a/reference/policies/base/set_has_value/index.html +++ b/reference/policies/base/set_has_value/index.html @@ -5,7 +5,7 @@ - + `static void _set_has_value(Impl &&, bool) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/base/ub/index.html b/reference/policies/base/ub/index.html index 9d23f8ca08..8590889642 100644 --- a/reference/policies/base/ub/index.html +++ b/reference/policies/base/ub/index.html @@ -5,7 +5,7 @@ - + `static void _ub(Impl &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • +
  • +
  • + +
  • -
  • +
  • + + +
  • +
  • @@ -2806,69 +2851,6 @@ Experimental - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/reference/policies/base/value/index.html b/reference/policies/base/value/index.html index 1ec205cf5a..284ce8e2e7 100644 --- a/reference/policies/base/value/index.html +++ b/reference/policies/base/value/index.html @@ -5,7 +5,7 @@ - + `static auto &&_value(Impl &&) noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/error_code_throw_as_system_error_outcome/index.html b/reference/policies/error_code_throw_as_system_error_outcome/index.html index 681194efe8..c19d6b26ca 100644 --- a/reference/policies/error_code_throw_as_system_error_outcome/index.html +++ b/reference/policies/error_code_throw_as_system_error_outcome/index.html @@ -5,7 +5,7 @@ - + `error_code_throw_as_system_error<T, EC, EP>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/error_code_throw_as_system_error_result/index.html b/reference/policies/error_code_throw_as_system_error_result/index.html index abb3f8c23d..6495abd939 100644 --- a/reference/policies/error_code_throw_as_system_error_result/index.html +++ b/reference/policies/error_code_throw_as_system_error_result/index.html @@ -5,7 +5,7 @@ - + `error_code_throw_as_system_error<T, EC, void>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/exception_ptr_rethrow_outcome/index.html b/reference/policies/exception_ptr_rethrow_outcome/index.html index 51c2424b8f..94410e50ae 100644 --- a/reference/policies/exception_ptr_rethrow_outcome/index.html +++ b/reference/policies/exception_ptr_rethrow_outcome/index.html @@ -5,7 +5,7 @@ - + `exception_ptr_rethrow<T, EC, EP>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/exception_ptr_rethrow_result/index.html b/reference/policies/exception_ptr_rethrow_result/index.html index bc063f62a1..9615be1213 100644 --- a/reference/policies/exception_ptr_rethrow_result/index.html +++ b/reference/policies/exception_ptr_rethrow_result/index.html @@ -5,7 +5,7 @@ - + `exception_ptr_rethrow<T, EC, void>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/fail_to_compile_observers/index.html b/reference/policies/fail_to_compile_observers/index.html index a61941fb00..bec12da971 100644 --- a/reference/policies/fail_to_compile_observers/index.html +++ b/reference/policies/fail_to_compile_observers/index.html @@ -5,7 +5,7 @@ - + `fail_to_compile_observers` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/index.html b/reference/policies/index.html index c004f601d2..b311762ef5 100644 --- a/reference/policies/index.html +++ b/reference/policies/index.html @@ -5,7 +5,7 @@ - + Policies :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/terminate/index.html b/reference/policies/terminate/index.html index 13ac93f46b..19d40a2bbd 100644 --- a/reference/policies/terminate/index.html +++ b/reference/policies/terminate/index.html @@ -5,7 +5,7 @@ - + `terminate` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/policies/throw_bad_result_access/index.html b/reference/policies/throw_bad_result_access/index.html index 2acc775a06..1d042c68eb 100644 --- a/reference/policies/throw_bad_result_access/index.html +++ b/reference/policies/throw_bad_result_access/index.html @@ -5,7 +5,7 @@ - + `throw_bad_result_access<EC>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/traits/index.html b/reference/traits/index.html index 08f3320bb5..242c0d2ace 100644 --- a/reference/traits/index.html +++ b/reference/traits/index.html @@ -5,7 +5,7 @@ - + Traits :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/traits/is_basic_outcome/index.html b/reference/traits/is_basic_outcome/index.html index e3eaa886f9..bb4daa97e0 100644 --- a/reference/traits/is_basic_outcome/index.html +++ b/reference/traits/is_basic_outcome/index.html @@ -5,7 +5,7 @@ - + `is_basic_outcome<T>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/traits/is_basic_result/index.html b/reference/traits/is_basic_result/index.html index 7690bd791e..b950e54fbf 100644 --- a/reference/traits/is_basic_result/index.html +++ b/reference/traits/is_basic_result/index.html @@ -5,7 +5,7 @@ - + `is_basic_result<T>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/traits/is_error_code_available/index.html b/reference/traits/is_error_code_available/index.html index f621af0ef8..c124d280d2 100644 --- a/reference/traits/is_error_code_available/index.html +++ b/reference/traits/is_error_code_available/index.html @@ -5,7 +5,7 @@ - + `is_error_code_available<T>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/traits/is_error_type/index.html b/reference/traits/is_error_type/index.html index ca92c297b4..0b52415d9b 100644 --- a/reference/traits/is_error_type/index.html +++ b/reference/traits/is_error_type/index.html @@ -5,7 +5,7 @@ - + `is_error_type<E>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/traits/is_error_type_enum/index.html b/reference/traits/is_error_type_enum/index.html index 4fbd085cfa..40e62f5b73 100644 --- a/reference/traits/is_error_type_enum/index.html +++ b/reference/traits/is_error_type_enum/index.html @@ -5,7 +5,7 @@ - + `is_error_type_enum<E, Enum>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/traits/is_exception_ptr_available/index.html b/reference/traits/is_exception_ptr_available/index.html index 666755f530..83821a3677 100644 --- a/reference/traits/is_exception_ptr_available/index.html +++ b/reference/traits/is_exception_ptr_available/index.html @@ -5,7 +5,7 @@ - + `is_exception_ptr_available<T>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/traits/is_failure_type/index.html b/reference/traits/is_failure_type/index.html index 5d60e15426..ecd3c69a0c 100644 --- a/reference/traits/is_failure_type/index.html +++ b/reference/traits/is_failure_type/index.html @@ -5,7 +5,7 @@ - + `is_failure_type<T>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/traits/is_move_bitcopying/index.html b/reference/traits/is_move_bitcopying/index.html index fe75fb0756..9ef32d65b1 100644 --- a/reference/traits/is_move_bitcopying/index.html +++ b/reference/traits/is_move_bitcopying/index.html @@ -5,7 +5,7 @@ - + `is_move_bitcopying<T>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/traits/is_success_type/index.html b/reference/traits/is_success_type/index.html index ddd178371d..e280c7968c 100644 --- a/reference/traits/is_success_type/index.html +++ b/reference/traits/is_success_type/index.html @@ -5,7 +5,7 @@ - + `is_success_type<T>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/traits/type_can_be_used_in_basic_result/index.html b/reference/traits/type_can_be_used_in_basic_result/index.html index 5cb8cd4702..c6690ab595 100644 --- a/reference/traits/type_can_be_used_in_basic_result/index.html +++ b/reference/traits/type_can_be_used_in_basic_result/index.html @@ -5,7 +5,7 @@ - + `type_can_be_used_in_basic_result<R>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/awaitables/eager/index.html b/reference/types/awaitables/eager/index.html index 6a59af76e4..dab4c6f62a 100644 --- a/reference/types/awaitables/eager/index.html +++ b/reference/types/awaitables/eager/index.html @@ -5,7 +5,7 @@ - + `eager<T, Executor = void>/atomic_eager<T, Executor = void>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/awaitables/generator/index.html b/reference/types/awaitables/generator/index.html index 2b461b52dc..eadfdb7358 100644 --- a/reference/types/awaitables/generator/index.html +++ b/reference/types/awaitables/generator/index.html @@ -5,7 +5,7 @@ - + `generator<T, Executor = void>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/awaitables/lazy/index.html b/reference/types/awaitables/lazy/index.html index 17946e731e..8dbbc3b564 100644 --- a/reference/types/awaitables/lazy/index.html +++ b/reference/types/awaitables/lazy/index.html @@ -5,7 +5,7 @@ - + `lazy<T, Executor = void>/atomic_lazy<T, Executor = void>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/bad_outcome_access/index.html b/reference/types/bad_outcome_access/index.html index 9bf3cb65ef..c839ebed22 100644 --- a/reference/types/bad_outcome_access/index.html +++ b/reference/types/bad_outcome_access/index.html @@ -5,7 +5,7 @@ - + `bad_outcome_access` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/bad_result_access/index.html b/reference/types/bad_result_access/index.html index 4c0a27cb95..2f88499378 100644 --- a/reference/types/bad_result_access/index.html +++ b/reference/types/bad_result_access/index.html @@ -5,7 +5,7 @@ - + `bad_result_access` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/bad_result_access_with/index.html b/reference/types/bad_result_access_with/index.html index c7cd4b50de..63337d7f82 100644 --- a/reference/types/bad_result_access_with/index.html +++ b/reference/types/bad_result_access_with/index.html @@ -5,7 +5,7 @@ - + `bad_result_access_with<EC>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/as_failure_lvalue/index.html b/reference/types/basic_outcome/as_failure_lvalue/index.html index f57c346f16..4dbcf857e5 100644 --- a/reference/types/basic_outcome/as_failure_lvalue/index.html +++ b/reference/types/basic_outcome/as_failure_lvalue/index.html @@ -5,7 +5,7 @@ - + `failure_type<error_type, exception_type> as_failure() const &` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/as_failure_rvalue/index.html b/reference/types/basic_outcome/as_failure_rvalue/index.html index 5e18cedd77..875f54de4c 100644 --- a/reference/types/basic_outcome/as_failure_rvalue/index.html +++ b/reference/types/basic_outcome/as_failure_rvalue/index.html @@ -5,7 +5,7 @@ - + `failure_type<error_type, exception_type> as_failure() &&` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/assume_error_lvalue/index.html b/reference/types/basic_outcome/assume_error_lvalue/index.html index 106e3d7cf0..89514d0e55 100644 --- a/reference/types/basic_outcome/assume_error_lvalue/index.html +++ b/reference/types/basic_outcome/assume_error_lvalue/index.html @@ -5,7 +5,7 @@ - + `error_type &assume_error() & noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/assume_error_lvalue_const/index.html b/reference/types/basic_outcome/assume_error_lvalue_const/index.html index c6bcaef90e..ee9c392ae2 100644 --- a/reference/types/basic_outcome/assume_error_lvalue_const/index.html +++ b/reference/types/basic_outcome/assume_error_lvalue_const/index.html @@ -5,7 +5,7 @@ - + `const error_type &assume_error() const & noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/assume_error_rvalue/index.html b/reference/types/basic_outcome/assume_error_rvalue/index.html index 9ea8d95050..c65af66a4d 100644 --- a/reference/types/basic_outcome/assume_error_rvalue/index.html +++ b/reference/types/basic_outcome/assume_error_rvalue/index.html @@ -5,7 +5,7 @@ - + `error_type &&assume_error() && noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/assume_error_rvalue_const/index.html b/reference/types/basic_outcome/assume_error_rvalue_const/index.html index 2761990a97..46bc6a889e 100644 --- a/reference/types/basic_outcome/assume_error_rvalue_const/index.html +++ b/reference/types/basic_outcome/assume_error_rvalue_const/index.html @@ -5,7 +5,7 @@ - + `const error_type &&assume_error() const && noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/assume_exception_lvalue/index.html b/reference/types/basic_outcome/assume_exception_lvalue/index.html index 28b3cb5642..1ba9c1c178 100644 --- a/reference/types/basic_outcome/assume_exception_lvalue/index.html +++ b/reference/types/basic_outcome/assume_exception_lvalue/index.html @@ -5,7 +5,7 @@ - + `exception_type &assume_exception() & noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/assume_exception_lvalue_const/index.html b/reference/types/basic_outcome/assume_exception_lvalue_const/index.html index 01a143c50c..0dc4ac2784 100644 --- a/reference/types/basic_outcome/assume_exception_lvalue_const/index.html +++ b/reference/types/basic_outcome/assume_exception_lvalue_const/index.html @@ -5,7 +5,7 @@ - + `const exception_type &assume_exception() const & noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/assume_exception_rvalue/index.html b/reference/types/basic_outcome/assume_exception_rvalue/index.html index 103407b220..6e5ad6677a 100644 --- a/reference/types/basic_outcome/assume_exception_rvalue/index.html +++ b/reference/types/basic_outcome/assume_exception_rvalue/index.html @@ -5,7 +5,7 @@ - + `exception_type &&assume_exception() && noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/assume_exception_rvalue_const/index.html b/reference/types/basic_outcome/assume_exception_rvalue_const/index.html index 4cc5ecd010..b4e80f4d74 100644 --- a/reference/types/basic_outcome/assume_exception_rvalue_const/index.html +++ b/reference/types/basic_outcome/assume_exception_rvalue_const/index.html @@ -5,7 +5,7 @@ - + `const exception_type &&assume_exception() const && noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/assume_value_lvalue/index.html b/reference/types/basic_outcome/assume_value_lvalue/index.html index 2972e4dc86..a015743601 100644 --- a/reference/types/basic_outcome/assume_value_lvalue/index.html +++ b/reference/types/basic_outcome/assume_value_lvalue/index.html @@ -5,7 +5,7 @@ - + `value_type &assume_value() & noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/assume_value_lvalue_const/index.html b/reference/types/basic_outcome/assume_value_lvalue_const/index.html index dbcf3b6e97..baebaffdec 100644 --- a/reference/types/basic_outcome/assume_value_lvalue_const/index.html +++ b/reference/types/basic_outcome/assume_value_lvalue_const/index.html @@ -5,7 +5,7 @@ - + `const value_type &assume_value() const & noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/assume_value_rvalue/index.html b/reference/types/basic_outcome/assume_value_rvalue/index.html index c5d884a1af..77ef5ed02b 100644 --- a/reference/types/basic_outcome/assume_value_rvalue/index.html +++ b/reference/types/basic_outcome/assume_value_rvalue/index.html @@ -5,7 +5,7 @@ - + `value_type &&assume_value() && noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/assume_value_rvalue_const/index.html b/reference/types/basic_outcome/assume_value_rvalue_const/index.html index b32071755a..e2f15ed71d 100644 --- a/reference/types/basic_outcome/assume_value_rvalue_const/index.html +++ b/reference/types/basic_outcome/assume_value_rvalue_const/index.html @@ -5,7 +5,7 @@ - + `const value_type &&assume_value() const && noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/copy_assignment/index.html b/reference/types/basic_outcome/copy_assignment/index.html index fe088d8292..500abbf9bd 100644 --- a/reference/types/basic_outcome/copy_assignment/index.html +++ b/reference/types/basic_outcome/copy_assignment/index.html @@ -5,7 +5,7 @@ - + `basic_outcome &operator=(const basic_outcome &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/copy_constructor/index.html b/reference/types/basic_outcome/copy_constructor/index.html index b922773848..a9a521820b 100644 --- a/reference/types/basic_outcome/copy_constructor/index.html +++ b/reference/types/basic_outcome/copy_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_outcome(const basic_outcome &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/default/index.html b/reference/types/basic_outcome/default/index.html index d13f3971b8..07c7b48060 100644 --- a/reference/types/basic_outcome/default/index.html +++ b/reference/types/basic_outcome/default/index.html @@ -5,7 +5,7 @@ - + `basic_outcome() = delete` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/destructor/index.html b/reference/types/basic_outcome/destructor/index.html index 901e000c98..0309db892b 100644 --- a/reference/types/basic_outcome/destructor/index.html +++ b/reference/types/basic_outcome/destructor/index.html @@ -5,7 +5,7 @@ - + `~basic_outcome()` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/disabling_catchall/index.html b/reference/types/basic_outcome/disabling_catchall/index.html index 0c6d597914..48035fef08 100644 --- a/reference/types/basic_outcome/disabling_catchall/index.html +++ b/reference/types/basic_outcome/disabling_catchall/index.html @@ -5,7 +5,7 @@ - + `basic_outcome(Args...) = delete` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/disabling_implicit_constructor/index.html b/reference/types/basic_outcome/disabling_implicit_constructor/index.html index 415b317851..d5f055c266 100644 --- a/reference/types/basic_outcome/disabling_implicit_constructor/index.html +++ b/reference/types/basic_outcome/disabling_implicit_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_outcome(X &&) = delete` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/equality_basic_outcome/index.html b/reference/types/basic_outcome/equality_basic_outcome/index.html index 46385c3c43..7e398819aa 100644 --- a/reference/types/basic_outcome/equality_basic_outcome/index.html +++ b/reference/types/basic_outcome/equality_basic_outcome/index.html @@ -5,7 +5,7 @@ - + `bool operator==(const basic_outcome<A, B, C, D> &) const` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/equality_basic_result/index.html b/reference/types/basic_outcome/equality_basic_result/index.html index b5f4a35247..537c45d04c 100644 --- a/reference/types/basic_outcome/equality_basic_result/index.html +++ b/reference/types/basic_outcome/equality_basic_result/index.html @@ -5,7 +5,7 @@ - + `bool operator==(const basic_result<A, B, C> &) const` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/equality_failure_type/index.html b/reference/types/basic_outcome/equality_failure_type/index.html index 57e213137a..8af96b56b6 100644 --- a/reference/types/basic_outcome/equality_failure_type/index.html +++ b/reference/types/basic_outcome/equality_failure_type/index.html @@ -5,7 +5,7 @@ - + `bool operator==(const failure_type<A, B> &) const` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/equality_success_type/index.html b/reference/types/basic_outcome/equality_success_type/index.html index 55034ea357..37f8d48171 100644 --- a/reference/types/basic_outcome/equality_success_type/index.html +++ b/reference/types/basic_outcome/equality_success_type/index.html @@ -5,7 +5,7 @@ - + `bool operator!=(const success_type<A> &) const` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/error_lvalue/index.html b/reference/types/basic_outcome/error_lvalue/index.html index 3c1aebae85..1f47f9f55d 100644 --- a/reference/types/basic_outcome/error_lvalue/index.html +++ b/reference/types/basic_outcome/error_lvalue/index.html @@ -5,7 +5,7 @@ - + `error_type &error() &` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/error_lvalue_const/index.html b/reference/types/basic_outcome/error_lvalue_const/index.html index 2d6586f6ee..c7828ffe7b 100644 --- a/reference/types/basic_outcome/error_lvalue_const/index.html +++ b/reference/types/basic_outcome/error_lvalue_const/index.html @@ -5,7 +5,7 @@ - + `const error_type &error() const &` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/error_rvalue/index.html b/reference/types/basic_outcome/error_rvalue/index.html index 7d03ab8dd4..29dbd755d2 100644 --- a/reference/types/basic_outcome/error_rvalue/index.html +++ b/reference/types/basic_outcome/error_rvalue/index.html @@ -5,7 +5,7 @@ - + `error_type &&error() &&` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/error_rvalue_const/index.html b/reference/types/basic_outcome/error_rvalue_const/index.html index eead9be27f..9e7d31d9c0 100644 --- a/reference/types/basic_outcome/error_rvalue_const/index.html +++ b/reference/types/basic_outcome/error_rvalue_const/index.html @@ -5,7 +5,7 @@ - + `const error_type &&error() const &&` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/exception_lvalue/index.html b/reference/types/basic_outcome/exception_lvalue/index.html index 16cde3457c..1ba6dd5fde 100644 --- a/reference/types/basic_outcome/exception_lvalue/index.html +++ b/reference/types/basic_outcome/exception_lvalue/index.html @@ -5,7 +5,7 @@ - + `exception_type &exception() &` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/exception_lvalue_const/index.html b/reference/types/basic_outcome/exception_lvalue_const/index.html index 666434c154..9e1e4ecbba 100644 --- a/reference/types/basic_outcome/exception_lvalue_const/index.html +++ b/reference/types/basic_outcome/exception_lvalue_const/index.html @@ -5,7 +5,7 @@ - + `const exception_type &exception() const &` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/exception_rvalue/index.html b/reference/types/basic_outcome/exception_rvalue/index.html index 61fd765598..4e2299a579 100644 --- a/reference/types/basic_outcome/exception_rvalue/index.html +++ b/reference/types/basic_outcome/exception_rvalue/index.html @@ -5,7 +5,7 @@ - + `exception_type &&exception() &&` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/exception_rvalue_const/index.html b/reference/types/basic_outcome/exception_rvalue_const/index.html index 6163b0a8da..e3985326aa 100644 --- a/reference/types/basic_outcome/exception_rvalue_const/index.html +++ b/reference/types/basic_outcome/exception_rvalue_const/index.html @@ -5,7 +5,7 @@ - + `const exception_type &&exception() const &&` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/explicit_copy_converting_constructor/index.html b/reference/types/basic_outcome/explicit_copy_converting_constructor/index.html index 418e72e86c..555edee88d 100644 --- a/reference/types/basic_outcome/explicit_copy_converting_constructor/index.html +++ b/reference/types/basic_outcome/explicit_copy_converting_constructor/index.html @@ -5,7 +5,7 @@ - + `explicit basic_outcome(const basic_outcome<A, B, C, D> &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/explicit_inplace_error_constructor/index.html b/reference/types/basic_outcome/explicit_inplace_error_constructor/index.html index c89e7657ed..ff61c65fcc 100644 --- a/reference/types/basic_outcome/explicit_inplace_error_constructor/index.html +++ b/reference/types/basic_outcome/explicit_inplace_error_constructor/index.html @@ -5,7 +5,7 @@ - + `explicit basic_outcome(in_place_type_t<error_type_if_enabled>, Args ...)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/explicit_inplace_error_constructor_il/index.html b/reference/types/basic_outcome/explicit_inplace_error_constructor_il/index.html index fd557e8f87..2acbc64cc6 100644 --- a/reference/types/basic_outcome/explicit_inplace_error_constructor_il/index.html +++ b/reference/types/basic_outcome/explicit_inplace_error_constructor_il/index.html @@ -5,7 +5,7 @@ - + `explicit basic_outcome(in_place_type_t<error_type_if_enabled>, std::initializer_list<U>, Args ...)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/explicit_inplace_exception_constructor/index.html b/reference/types/basic_outcome/explicit_inplace_exception_constructor/index.html index 83c7a84740..5283aac668 100644 --- a/reference/types/basic_outcome/explicit_inplace_exception_constructor/index.html +++ b/reference/types/basic_outcome/explicit_inplace_exception_constructor/index.html @@ -5,7 +5,7 @@ - + `explicit basic_outcome(in_place_type_t<exception_type_if_enabled>, Args ...)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/explicit_inplace_exception_constructor_il/index.html b/reference/types/basic_outcome/explicit_inplace_exception_constructor_il/index.html index 6b125cc2bf..e4d1b6d632 100644 --- a/reference/types/basic_outcome/explicit_inplace_exception_constructor_il/index.html +++ b/reference/types/basic_outcome/explicit_inplace_exception_constructor_il/index.html @@ -5,7 +5,7 @@ - + `explicit basic_outcome(in_place_type_t<exception_type_if_enabled>, std::initializer_list<U>, Args ...)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/explicit_inplace_value_constructor/index.html b/reference/types/basic_outcome/explicit_inplace_value_constructor/index.html index 19b10e8926..9bdeda260c 100644 --- a/reference/types/basic_outcome/explicit_inplace_value_constructor/index.html +++ b/reference/types/basic_outcome/explicit_inplace_value_constructor/index.html @@ -5,7 +5,7 @@ - + `explicit basic_outcome(in_place_type_t<value_type_if_enabled>, Args ...)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/explicit_inplace_value_constructor_il/index.html b/reference/types/basic_outcome/explicit_inplace_value_constructor_il/index.html index 1a193d197a..6dd5e485d7 100644 --- a/reference/types/basic_outcome/explicit_inplace_value_constructor_il/index.html +++ b/reference/types/basic_outcome/explicit_inplace_value_constructor_il/index.html @@ -5,7 +5,7 @@ - + `explicit basic_outcome(in_place_type_t<value_type_if_enabled>, std::initializer_list<U>, Args ...)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/explicit_move_converting_constructor/index.html b/reference/types/basic_outcome/explicit_move_converting_constructor/index.html index c654e8454f..55ec9d2fb7 100644 --- a/reference/types/basic_outcome/explicit_move_converting_constructor/index.html +++ b/reference/types/basic_outcome/explicit_move_converting_constructor/index.html @@ -5,7 +5,7 @@ - + `explicit basic_outcome(basic_outcome<A, B, C, D> &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/explicit_result_copy_converting_constructor/index.html b/reference/types/basic_outcome/explicit_result_copy_converting_constructor/index.html index 2658d78871..f13e74279b 100644 --- a/reference/types/basic_outcome/explicit_result_copy_converting_constructor/index.html +++ b/reference/types/basic_outcome/explicit_result_copy_converting_constructor/index.html @@ -5,7 +5,7 @@ - + `explicit basic_outcome(const basic_result<A, B, C> &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/explicit_result_make_error_code_copy_converting_constructor/index.html b/reference/types/basic_outcome/explicit_result_make_error_code_copy_converting_constructor/index.html index eb7b42ff35..44434b1228 100644 --- a/reference/types/basic_outcome/explicit_result_make_error_code_copy_converting_constructor/index.html +++ b/reference/types/basic_outcome/explicit_result_make_error_code_copy_converting_constructor/index.html @@ -5,7 +5,7 @@ - + `explicit basic_outcome(const basic_result<A, B, C> &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/explicit_result_make_error_code_move_converting_constructor/index.html b/reference/types/basic_outcome/explicit_result_make_error_code_move_converting_constructor/index.html index a62b226868..c97d0fc392 100644 --- a/reference/types/basic_outcome/explicit_result_make_error_code_move_converting_constructor/index.html +++ b/reference/types/basic_outcome/explicit_result_make_error_code_move_converting_constructor/index.html @@ -5,7 +5,7 @@ - + `explicit basic_outcome(basic_result<A, B, C> &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/explicit_result_move_converting_constructor/index.html b/reference/types/basic_outcome/explicit_result_move_converting_constructor/index.html index 39fa1e508c..4e2ebbb98d 100644 --- a/reference/types/basic_outcome/explicit_result_move_converting_constructor/index.html +++ b/reference/types/basic_outcome/explicit_result_move_converting_constructor/index.html @@ -5,7 +5,7 @@ - + `explicit basic_outcome(basic_result<A, B, C> &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/explicit_valueorerror_converting_constructor/index.html b/reference/types/basic_outcome/explicit_valueorerror_converting_constructor/index.html index d7629bd657..49e04cbb24 100644 --- a/reference/types/basic_outcome/explicit_valueorerror_converting_constructor/index.html +++ b/reference/types/basic_outcome/explicit_valueorerror_converting_constructor/index.html @@ -5,7 +5,7 @@ - + `explicit basic_outcome(concepts::value_or_error<T, E> &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/failure/index.html b/reference/types/basic_outcome/failure/index.html index e544ab6df7..d7da7160da 100644 --- a/reference/types/basic_outcome/failure/index.html +++ b/reference/types/basic_outcome/failure/index.html @@ -5,7 +5,7 @@ - + `exception_type failure() const noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/has_error/index.html b/reference/types/basic_outcome/has_error/index.html index b18273aadb..d4ca6f119d 100644 --- a/reference/types/basic_outcome/has_error/index.html +++ b/reference/types/basic_outcome/has_error/index.html @@ -5,7 +5,7 @@ - + `bool has_error() const noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/has_exception/index.html b/reference/types/basic_outcome/has_exception/index.html index cae74c54da..65febd7c32 100644 --- a/reference/types/basic_outcome/has_exception/index.html +++ b/reference/types/basic_outcome/has_exception/index.html @@ -5,7 +5,7 @@ - + `bool has_exception() const noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/has_failure/index.html b/reference/types/basic_outcome/has_failure/index.html index 0cbdd80c14..e4e5b3ed02 100644 --- a/reference/types/basic_outcome/has_failure/index.html +++ b/reference/types/basic_outcome/has_failure/index.html @@ -5,7 +5,7 @@ - + `bool has_failure() const noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/has_value/index.html b/reference/types/basic_outcome/has_value/index.html index fb8fcbb420..56ef76a134 100644 --- a/reference/types/basic_outcome/has_value/index.html +++ b/reference/types/basic_outcome/has_value/index.html @@ -5,7 +5,7 @@ - + `bool has_value() const noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/implicit_error_condition_converting_constructor/index.html b/reference/types/basic_outcome/implicit_error_condition_converting_constructor/index.html index 94ed75fb65..c758884444 100644 --- a/reference/types/basic_outcome/implicit_error_condition_converting_constructor/index.html +++ b/reference/types/basic_outcome/implicit_error_condition_converting_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_outcome(ErrorCondEnum &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/implicit_error_converting_constructor/index.html b/reference/types/basic_outcome/implicit_error_converting_constructor/index.html index 304b2ea7eb..6408a08852 100644 --- a/reference/types/basic_outcome/implicit_error_converting_constructor/index.html +++ b/reference/types/basic_outcome/implicit_error_converting_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_outcome(S &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/implicit_error_exception_converting_constructor/index.html b/reference/types/basic_outcome/implicit_error_exception_converting_constructor/index.html index 196643e978..eef9a19cb1 100644 --- a/reference/types/basic_outcome/implicit_error_exception_converting_constructor/index.html +++ b/reference/types/basic_outcome/implicit_error_exception_converting_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_outcome(S &&, P &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/implicit_exception_converting_constructor/index.html b/reference/types/basic_outcome/implicit_exception_converting_constructor/index.html index 93a696a3bb..d690765ee0 100644 --- a/reference/types/basic_outcome/implicit_exception_converting_constructor/index.html +++ b/reference/types/basic_outcome/implicit_exception_converting_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_outcome(P &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/implicit_failure_error_copy_constructor/index.html b/reference/types/basic_outcome/implicit_failure_error_copy_constructor/index.html index 730c2bc5b1..f004c8ec1e 100644 --- a/reference/types/basic_outcome/implicit_failure_error_copy_constructor/index.html +++ b/reference/types/basic_outcome/implicit_failure_error_copy_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_outcome(const failure_type<EC> &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/implicit_failure_error_exception_copy_constructor/index.html b/reference/types/basic_outcome/implicit_failure_error_exception_copy_constructor/index.html index e7238b6ef7..d15683a2f7 100644 --- a/reference/types/basic_outcome/implicit_failure_error_exception_copy_constructor/index.html +++ b/reference/types/basic_outcome/implicit_failure_error_exception_copy_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_outcome(const failure_type<EC, EP> &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/implicit_failure_error_exception_move_constructor/index.html b/reference/types/basic_outcome/implicit_failure_error_exception_move_constructor/index.html index d56d302d71..2936d625dc 100644 --- a/reference/types/basic_outcome/implicit_failure_error_exception_move_constructor/index.html +++ b/reference/types/basic_outcome/implicit_failure_error_exception_move_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_outcome(failure_type<EC, EP> &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/implicit_failure_error_make_error_code_copy_constructor/index.html b/reference/types/basic_outcome/implicit_failure_error_make_error_code_copy_constructor/index.html index dc8298b0bc..2bf95e8e5c 100644 --- a/reference/types/basic_outcome/implicit_failure_error_make_error_code_copy_constructor/index.html +++ b/reference/types/basic_outcome/implicit_failure_error_make_error_code_copy_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_outcome(const failure_type<EC> &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/implicit_failure_error_make_error_code_move_constructor/index.html b/reference/types/basic_outcome/implicit_failure_error_make_error_code_move_constructor/index.html index a0d2fa4432..cc50371566 100644 --- a/reference/types/basic_outcome/implicit_failure_error_make_error_code_move_constructor/index.html +++ b/reference/types/basic_outcome/implicit_failure_error_make_error_code_move_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_outcome(failure_type<EC> &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/implicit_failure_error_move_constructor/index.html b/reference/types/basic_outcome/implicit_failure_error_move_constructor/index.html index e5ac696b70..fa2a509ad0 100644 --- a/reference/types/basic_outcome/implicit_failure_error_move_constructor/index.html +++ b/reference/types/basic_outcome/implicit_failure_error_move_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_outcome(failure_type<EC> &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/implicit_failure_exception_copy_constructor/index.html b/reference/types/basic_outcome/implicit_failure_exception_copy_constructor/index.html index 0f94dee696..fe7fc96a78 100644 --- a/reference/types/basic_outcome/implicit_failure_exception_copy_constructor/index.html +++ b/reference/types/basic_outcome/implicit_failure_exception_copy_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_outcome(const failure_type<EP> &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/implicit_failure_exception_move_constructor/index.html b/reference/types/basic_outcome/implicit_failure_exception_move_constructor/index.html index d1b4d1b962..c1aa03ebfc 100644 --- a/reference/types/basic_outcome/implicit_failure_exception_move_constructor/index.html +++ b/reference/types/basic_outcome/implicit_failure_exception_move_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_outcome(failure_type<EP> &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/implicit_inplace_value_error_exception_constructor/index.html b/reference/types/basic_outcome/implicit_inplace_value_error_exception_constructor/index.html index 8755ae8360..fd3bf74176 100644 --- a/reference/types/basic_outcome/implicit_inplace_value_error_exception_constructor/index.html +++ b/reference/types/basic_outcome/implicit_inplace_value_error_exception_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_outcome(A1 &&, A2 &&, Args ...)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/implicit_success_copy_constructor/index.html b/reference/types/basic_outcome/implicit_success_copy_constructor/index.html index 79ba467696..1c0be46f5b 100644 --- a/reference/types/basic_outcome/implicit_success_copy_constructor/index.html +++ b/reference/types/basic_outcome/implicit_success_copy_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_outcome(const success_type<T> &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/implicit_success_move_constructor/index.html b/reference/types/basic_outcome/implicit_success_move_constructor/index.html index 5da29b50c8..23077072a9 100644 --- a/reference/types/basic_outcome/implicit_success_move_constructor/index.html +++ b/reference/types/basic_outcome/implicit_success_move_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_outcome(success_type<T> &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/implicit_value_converting_constructor/index.html b/reference/types/basic_outcome/implicit_value_converting_constructor/index.html index 53b7028700..38a59be297 100644 --- a/reference/types/basic_outcome/implicit_value_converting_constructor/index.html +++ b/reference/types/basic_outcome/implicit_value_converting_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_outcome(R &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/index.html b/reference/types/basic_outcome/index.html index b2bf5247a9..ea3e799031 100644 --- a/reference/types/basic_outcome/index.html +++ b/reference/types/basic_outcome/index.html @@ -5,7 +5,7 @@ - + `basic_outcome<T, EC, EP, NoValuePolicy>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/inequality_basic_outcome/index.html b/reference/types/basic_outcome/inequality_basic_outcome/index.html index 269199d2b1..e1a213f821 100644 --- a/reference/types/basic_outcome/inequality_basic_outcome/index.html +++ b/reference/types/basic_outcome/inequality_basic_outcome/index.html @@ -5,7 +5,7 @@ - + `bool operator!=(const basic_outcome<A, B, C, D> &) const` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/inequality_basic_result/index.html b/reference/types/basic_outcome/inequality_basic_result/index.html index c2e54664ac..db4171dc72 100644 --- a/reference/types/basic_outcome/inequality_basic_result/index.html +++ b/reference/types/basic_outcome/inequality_basic_result/index.html @@ -5,7 +5,7 @@ - + `bool operator!=(const basic_result<A, B, C> &) const` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/inequality_failure_type/index.html b/reference/types/basic_outcome/inequality_failure_type/index.html index 4e29d64000..3f5a059165 100644 --- a/reference/types/basic_outcome/inequality_failure_type/index.html +++ b/reference/types/basic_outcome/inequality_failure_type/index.html @@ -5,7 +5,7 @@ - + `bool operator!=(const failure_type<A, B> &) const` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/inequality_success_type/index.html b/reference/types/basic_outcome/inequality_success_type/index.html index ebb9296d10..ccd2345e63 100644 --- a/reference/types/basic_outcome/inequality_success_type/index.html +++ b/reference/types/basic_outcome/inequality_success_type/index.html @@ -5,7 +5,7 @@ - + `bool operator==(const success_type<A> &) const` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/move_assignment/index.html b/reference/types/basic_outcome/move_assignment/index.html index abb6639f12..0d7db35cc6 100644 --- a/reference/types/basic_outcome/move_assignment/index.html +++ b/reference/types/basic_outcome/move_assignment/index.html @@ -5,7 +5,7 @@ - + `basic_outcome &operator=(basic_outcome &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/move_constructor/index.html b/reference/types/basic_outcome/move_constructor/index.html index 84fe6744da..e99ecc994c 100644 --- a/reference/types/basic_outcome/move_constructor/index.html +++ b/reference/types/basic_outcome/move_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_outcome(basic_outcome &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/operator_bool/index.html b/reference/types/basic_outcome/operator_bool/index.html index 10ffbf41d5..c56cedc0c3 100644 --- a/reference/types/basic_outcome/operator_bool/index.html +++ b/reference/types/basic_outcome/operator_bool/index.html @@ -5,7 +5,7 @@ - + `explicit operator bool() const noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/swap/index.html b/reference/types/basic_outcome/swap/index.html index cf15e25993..075ea36df0 100644 --- a/reference/types/basic_outcome/swap/index.html +++ b/reference/types/basic_outcome/swap/index.html @@ -5,7 +5,7 @@ - + `void swap(basic_outcome &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/value_lvalue/index.html b/reference/types/basic_outcome/value_lvalue/index.html index 876239122c..66db4bf2c9 100644 --- a/reference/types/basic_outcome/value_lvalue/index.html +++ b/reference/types/basic_outcome/value_lvalue/index.html @@ -5,7 +5,7 @@ - + `value_type &value() &` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/value_lvalue_const/index.html b/reference/types/basic_outcome/value_lvalue_const/index.html index 56c0f306e8..150f96a0bf 100644 --- a/reference/types/basic_outcome/value_lvalue_const/index.html +++ b/reference/types/basic_outcome/value_lvalue_const/index.html @@ -5,7 +5,7 @@ - + `const value_type &value() const &` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/value_rvalue/index.html b/reference/types/basic_outcome/value_rvalue/index.html index 15797b0a74..e7e93dacc0 100644 --- a/reference/types/basic_outcome/value_rvalue/index.html +++ b/reference/types/basic_outcome/value_rvalue/index.html @@ -5,7 +5,7 @@ - + `value_type &&value() &&` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_outcome/value_rvalue_const/index.html b/reference/types/basic_outcome/value_rvalue_const/index.html index d939f176ae..96496ff656 100644 --- a/reference/types/basic_outcome/value_rvalue_const/index.html +++ b/reference/types/basic_outcome/value_rvalue_const/index.html @@ -5,7 +5,7 @@ - + `const value_type &&value() const &&` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/as_failure_lvalue/index.html b/reference/types/basic_result/as_failure_lvalue/index.html index 4090f2cdc3..dee7e4faf2 100644 --- a/reference/types/basic_result/as_failure_lvalue/index.html +++ b/reference/types/basic_result/as_failure_lvalue/index.html @@ -5,7 +5,7 @@ - + `auto as_failure() const &` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/as_failure_rvalue/index.html b/reference/types/basic_result/as_failure_rvalue/index.html index 284a3de215..be26c48239 100644 --- a/reference/types/basic_result/as_failure_rvalue/index.html +++ b/reference/types/basic_result/as_failure_rvalue/index.html @@ -5,7 +5,7 @@ - + `auto as_failure() &&` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/assume_error_lvalue/index.html b/reference/types/basic_result/assume_error_lvalue/index.html index a0c184fa99..6ba39f594a 100644 --- a/reference/types/basic_result/assume_error_lvalue/index.html +++ b/reference/types/basic_result/assume_error_lvalue/index.html @@ -5,7 +5,7 @@ - + `error_type &assume_error() & noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/assume_error_lvalue_const/index.html b/reference/types/basic_result/assume_error_lvalue_const/index.html index fffe343fc5..e680ac7796 100644 --- a/reference/types/basic_result/assume_error_lvalue_const/index.html +++ b/reference/types/basic_result/assume_error_lvalue_const/index.html @@ -5,7 +5,7 @@ - + `const error_type &assume_error() const & noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/assume_error_rvalue/index.html b/reference/types/basic_result/assume_error_rvalue/index.html index 13edd9632c..695095660e 100644 --- a/reference/types/basic_result/assume_error_rvalue/index.html +++ b/reference/types/basic_result/assume_error_rvalue/index.html @@ -5,7 +5,7 @@ - + `error_type &&assume_error() && noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/assume_error_rvalue_const/index.html b/reference/types/basic_result/assume_error_rvalue_const/index.html index a0d6d0a0bb..3be69aa4ca 100644 --- a/reference/types/basic_result/assume_error_rvalue_const/index.html +++ b/reference/types/basic_result/assume_error_rvalue_const/index.html @@ -5,7 +5,7 @@ - + `const error_type &&assume_error() const && noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/assume_value_lvalue/index.html b/reference/types/basic_result/assume_value_lvalue/index.html index f2b3ad2082..79d3d0d6a8 100644 --- a/reference/types/basic_result/assume_value_lvalue/index.html +++ b/reference/types/basic_result/assume_value_lvalue/index.html @@ -5,7 +5,7 @@ - + `value_type &assume_value() & noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/assume_value_lvalue_const/index.html b/reference/types/basic_result/assume_value_lvalue_const/index.html index 16aad37406..6c74e10050 100644 --- a/reference/types/basic_result/assume_value_lvalue_const/index.html +++ b/reference/types/basic_result/assume_value_lvalue_const/index.html @@ -5,7 +5,7 @@ - + `const value_type &assume_value() const & noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/assume_value_rvalue/index.html b/reference/types/basic_result/assume_value_rvalue/index.html index 5ed48a5996..40ef4195d5 100644 --- a/reference/types/basic_result/assume_value_rvalue/index.html +++ b/reference/types/basic_result/assume_value_rvalue/index.html @@ -5,7 +5,7 @@ - + `value_type &&assume_value() && noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/assume_value_rvalue_const/index.html b/reference/types/basic_result/assume_value_rvalue_const/index.html index bb11e66a23..4126fe8dab 100644 --- a/reference/types/basic_result/assume_value_rvalue_const/index.html +++ b/reference/types/basic_result/assume_value_rvalue_const/index.html @@ -5,7 +5,7 @@ - + `const value_type &&assume_value() const && noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/copy_assignment/index.html b/reference/types/basic_result/copy_assignment/index.html index 7b12f22d15..bb36ba443b 100644 --- a/reference/types/basic_result/copy_assignment/index.html +++ b/reference/types/basic_result/copy_assignment/index.html @@ -5,7 +5,7 @@ - + `basic_result &operator=(const basic_result &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/copy_constructor/index.html b/reference/types/basic_result/copy_constructor/index.html index 892d737115..0c87aae73f 100644 --- a/reference/types/basic_result/copy_constructor/index.html +++ b/reference/types/basic_result/copy_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_result(const basic_result &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/default/index.html b/reference/types/basic_result/default/index.html index 9d0f2e30ae..557ae31313 100644 --- a/reference/types/basic_result/default/index.html +++ b/reference/types/basic_result/default/index.html @@ -5,7 +5,7 @@ - + `basic_result() = delete` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/destructor/index.html b/reference/types/basic_result/destructor/index.html index 957546c5fe..d14951b2db 100644 --- a/reference/types/basic_result/destructor/index.html +++ b/reference/types/basic_result/destructor/index.html @@ -5,7 +5,7 @@ - + `~basic_result()` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/disabling_catchall/index.html b/reference/types/basic_result/disabling_catchall/index.html index 78fc18e19e..297fc17f60 100644 --- a/reference/types/basic_result/disabling_catchall/index.html +++ b/reference/types/basic_result/disabling_catchall/index.html @@ -5,7 +5,7 @@ - + `basic_result(Args...) = delete` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/disabling_implicit_constructor/index.html b/reference/types/basic_result/disabling_implicit_constructor/index.html index bd571f2f15..b3cb159464 100644 --- a/reference/types/basic_result/disabling_implicit_constructor/index.html +++ b/reference/types/basic_result/disabling_implicit_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_result(X &&) = delete` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/equality_basic_result/index.html b/reference/types/basic_result/equality_basic_result/index.html index 483e398d81..557a7e07bd 100644 --- a/reference/types/basic_result/equality_basic_result/index.html +++ b/reference/types/basic_result/equality_basic_result/index.html @@ -5,7 +5,7 @@ - + `bool operator==(const basic_result<A, B, C> &) const` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/equality_failure_type/index.html b/reference/types/basic_result/equality_failure_type/index.html index aa32d1b946..500d8ffa0e 100644 --- a/reference/types/basic_result/equality_failure_type/index.html +++ b/reference/types/basic_result/equality_failure_type/index.html @@ -5,7 +5,7 @@ - + `bool operator==(const failure_type<A, void> &) const` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/equality_success_type/index.html b/reference/types/basic_result/equality_success_type/index.html index d5bfb0123f..1048c06a28 100644 --- a/reference/types/basic_result/equality_success_type/index.html +++ b/reference/types/basic_result/equality_success_type/index.html @@ -5,7 +5,7 @@ - + `bool operator!=(const success_type<A> &) const` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/error_lvalue/index.html b/reference/types/basic_result/error_lvalue/index.html index e837e21403..3dd997ca5e 100644 --- a/reference/types/basic_result/error_lvalue/index.html +++ b/reference/types/basic_result/error_lvalue/index.html @@ -5,7 +5,7 @@ - + `error_type &error() &` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/error_lvalue_const/index.html b/reference/types/basic_result/error_lvalue_const/index.html index 688030dec2..01e6753df2 100644 --- a/reference/types/basic_result/error_lvalue_const/index.html +++ b/reference/types/basic_result/error_lvalue_const/index.html @@ -5,7 +5,7 @@ - + `const error_type &error() const &` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/error_rvalue/index.html b/reference/types/basic_result/error_rvalue/index.html index 29102aa542..bb9a59769e 100644 --- a/reference/types/basic_result/error_rvalue/index.html +++ b/reference/types/basic_result/error_rvalue/index.html @@ -5,7 +5,7 @@ - + `error_type &&error() &&` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/error_rvalue_const/index.html b/reference/types/basic_result/error_rvalue_const/index.html index fe4cb69cdf..f20bc2b80c 100644 --- a/reference/types/basic_result/error_rvalue_const/index.html +++ b/reference/types/basic_result/error_rvalue_const/index.html @@ -5,7 +5,7 @@ - + `const error_type &&error() const &&` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/explicit_copy_converting_constructor/index.html b/reference/types/basic_result/explicit_copy_converting_constructor/index.html index 571c2d02cf..1e069ab0ac 100644 --- a/reference/types/basic_result/explicit_copy_converting_constructor/index.html +++ b/reference/types/basic_result/explicit_copy_converting_constructor/index.html @@ -5,7 +5,7 @@ - + `explicit basic_result(const basic_result<R, S, P> &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/explicit_inplace_error_constructor/index.html b/reference/types/basic_result/explicit_inplace_error_constructor/index.html index 672733d11f..9a345228f1 100644 --- a/reference/types/basic_result/explicit_inplace_error_constructor/index.html +++ b/reference/types/basic_result/explicit_inplace_error_constructor/index.html @@ -5,7 +5,7 @@ - + `explicit basic_result(in_place_type_t<error_type_if_enabled>, Args ...)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/explicit_inplace_error_constructor_il/index.html b/reference/types/basic_result/explicit_inplace_error_constructor_il/index.html index cd55b09a72..ec11ab6c91 100644 --- a/reference/types/basic_result/explicit_inplace_error_constructor_il/index.html +++ b/reference/types/basic_result/explicit_inplace_error_constructor_il/index.html @@ -5,7 +5,7 @@ - + `explicit basic_result(in_place_type_t<error_type_if_enabled>, std::initializer_list<U>, Args ...)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/explicit_inplace_value_constructor/index.html b/reference/types/basic_result/explicit_inplace_value_constructor/index.html index 7482201129..d31869ca2d 100644 --- a/reference/types/basic_result/explicit_inplace_value_constructor/index.html +++ b/reference/types/basic_result/explicit_inplace_value_constructor/index.html @@ -5,7 +5,7 @@ - + `explicit basic_result(in_place_type_t<value_type_if_enabled>, Args ...)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/explicit_inplace_value_constructor_il/index.html b/reference/types/basic_result/explicit_inplace_value_constructor_il/index.html index 63503ee75a..26597b2b6b 100644 --- a/reference/types/basic_result/explicit_inplace_value_constructor_il/index.html +++ b/reference/types/basic_result/explicit_inplace_value_constructor_il/index.html @@ -5,7 +5,7 @@ - + `explicit basic_result(in_place_type_t<value_type_if_enabled>, std::initializer_list<U>, Args ...)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/explicit_make_error_code_copy_converting_constructor/index.html b/reference/types/basic_result/explicit_make_error_code_copy_converting_constructor/index.html index a0f8b59079..240be0c822 100644 --- a/reference/types/basic_result/explicit_make_error_code_copy_converting_constructor/index.html +++ b/reference/types/basic_result/explicit_make_error_code_copy_converting_constructor/index.html @@ -5,7 +5,7 @@ - + `explicit basic_result(const basic_result<R, S, P> &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/explicit_make_error_code_move_converting_constructor/index.html b/reference/types/basic_result/explicit_make_error_code_move_converting_constructor/index.html index d07622c3a7..38c3636775 100644 --- a/reference/types/basic_result/explicit_make_error_code_move_converting_constructor/index.html +++ b/reference/types/basic_result/explicit_make_error_code_move_converting_constructor/index.html @@ -5,7 +5,7 @@ - + `explicit basic_result(basic_result<R, S, P> &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/explicit_make_exception_ptr_copy_converting_constructor/index.html b/reference/types/basic_result/explicit_make_exception_ptr_copy_converting_constructor/index.html index 7c08ec833c..dd989ec822 100644 --- a/reference/types/basic_result/explicit_make_exception_ptr_copy_converting_constructor/index.html +++ b/reference/types/basic_result/explicit_make_exception_ptr_copy_converting_constructor/index.html @@ -5,7 +5,7 @@ - + `explicit basic_result(const basic_result<R, S, P> &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/explicit_make_exception_ptr_move_converting_constructor/index.html b/reference/types/basic_result/explicit_make_exception_ptr_move_converting_constructor/index.html index 113d366ee9..af18d4ad55 100644 --- a/reference/types/basic_result/explicit_make_exception_ptr_move_converting_constructor/index.html +++ b/reference/types/basic_result/explicit_make_exception_ptr_move_converting_constructor/index.html @@ -5,7 +5,7 @@ - + `explicit basic_result(basic_result<R, S, P> &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/explicit_move_converting_constructor/index.html b/reference/types/basic_result/explicit_move_converting_constructor/index.html index 7f6e200f5b..23dd4146c9 100644 --- a/reference/types/basic_result/explicit_move_converting_constructor/index.html +++ b/reference/types/basic_result/explicit_move_converting_constructor/index.html @@ -5,7 +5,7 @@ - + `explicit basic_result(basic_result<R, S, P> &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/explicit_valueorerror_converting_constructor/index.html b/reference/types/basic_result/explicit_valueorerror_converting_constructor/index.html index e79d77b1ad..2bd4642dc0 100644 --- a/reference/types/basic_result/explicit_valueorerror_converting_constructor/index.html +++ b/reference/types/basic_result/explicit_valueorerror_converting_constructor/index.html @@ -5,7 +5,7 @@ - + `explicit basic_result(concepts::value_or_error<T, E> &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/has_error/index.html b/reference/types/basic_result/has_error/index.html index bc6af0d0fa..95b557393c 100644 --- a/reference/types/basic_result/has_error/index.html +++ b/reference/types/basic_result/has_error/index.html @@ -5,7 +5,7 @@ - + `bool has_error() const noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/has_exception/index.html b/reference/types/basic_result/has_exception/index.html index d821fc0d5f..407fe794ca 100644 --- a/reference/types/basic_result/has_exception/index.html +++ b/reference/types/basic_result/has_exception/index.html @@ -5,7 +5,7 @@ - + `bool has_exception() const noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/has_failure/index.html b/reference/types/basic_result/has_failure/index.html index d547235067..d451480007 100644 --- a/reference/types/basic_result/has_failure/index.html +++ b/reference/types/basic_result/has_failure/index.html @@ -5,7 +5,7 @@ - + `bool has_failure() const noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/has_lost_consistency/index.html b/reference/types/basic_result/has_lost_consistency/index.html index 28f48c88da..9c5c14595f 100644 --- a/reference/types/basic_result/has_lost_consistency/index.html +++ b/reference/types/basic_result/has_lost_consistency/index.html @@ -5,7 +5,7 @@ - + `bool has_lost_consistency() const noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/has_value/index.html b/reference/types/basic_result/has_value/index.html index 691ca9147c..562660f671 100644 --- a/reference/types/basic_result/has_value/index.html +++ b/reference/types/basic_result/has_value/index.html @@ -5,7 +5,7 @@ - + `bool has_value() const noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/implicit_error_condition_converting_constructor/index.html b/reference/types/basic_result/implicit_error_condition_converting_constructor/index.html index 42c5f4fcb3..46f07054e8 100644 --- a/reference/types/basic_result/implicit_error_condition_converting_constructor/index.html +++ b/reference/types/basic_result/implicit_error_condition_converting_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_result(ErrorCondEnum &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/implicit_error_converting_constructor/index.html b/reference/types/basic_result/implicit_error_converting_constructor/index.html index c67c1a9e43..b571ea2d52 100644 --- a/reference/types/basic_result/implicit_error_converting_constructor/index.html +++ b/reference/types/basic_result/implicit_error_converting_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_result(S &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/implicit_failure_copy_constructor/index.html b/reference/types/basic_result/implicit_failure_copy_constructor/index.html index 220f2bae56..f75de3f204 100644 --- a/reference/types/basic_result/implicit_failure_copy_constructor/index.html +++ b/reference/types/basic_result/implicit_failure_copy_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_result(const failure_type<T> &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/implicit_failure_make_error_code_copy_constructor/index.html b/reference/types/basic_result/implicit_failure_make_error_code_copy_constructor/index.html index c31714b1ee..9f611b99f2 100644 --- a/reference/types/basic_result/implicit_failure_make_error_code_copy_constructor/index.html +++ b/reference/types/basic_result/implicit_failure_make_error_code_copy_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_result(const failure_type<T> &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/implicit_failure_make_error_code_move_constructor/index.html b/reference/types/basic_result/implicit_failure_make_error_code_move_constructor/index.html index 60c2f9bf17..13ae7bd041 100644 --- a/reference/types/basic_result/implicit_failure_make_error_code_move_constructor/index.html +++ b/reference/types/basic_result/implicit_failure_make_error_code_move_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_result(failure_type<T> &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/implicit_failure_make_exception_ptr_copy_constructor/index.html b/reference/types/basic_result/implicit_failure_make_exception_ptr_copy_constructor/index.html index 33fb0d63fc..c22e8cb99f 100644 --- a/reference/types/basic_result/implicit_failure_make_exception_ptr_copy_constructor/index.html +++ b/reference/types/basic_result/implicit_failure_make_exception_ptr_copy_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_result(const failure_type<T> &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/implicit_failure_make_exception_ptr_move_constructor/index.html b/reference/types/basic_result/implicit_failure_make_exception_ptr_move_constructor/index.html index 8cb2e606ec..532acf2363 100644 --- a/reference/types/basic_result/implicit_failure_make_exception_ptr_move_constructor/index.html +++ b/reference/types/basic_result/implicit_failure_make_exception_ptr_move_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_result(failure_type<T> &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/implicit_failure_move_constructor/index.html b/reference/types/basic_result/implicit_failure_move_constructor/index.html index 26f113594c..ea53633c59 100644 --- a/reference/types/basic_result/implicit_failure_move_constructor/index.html +++ b/reference/types/basic_result/implicit_failure_move_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_result(failure_type<T> &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/implicit_inplace_value_error_constructor/index.html b/reference/types/basic_result/implicit_inplace_value_error_constructor/index.html index c9134971ee..90413598d7 100644 --- a/reference/types/basic_result/implicit_inplace_value_error_constructor/index.html +++ b/reference/types/basic_result/implicit_inplace_value_error_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_result(A1 &&, A2 &&, Args ...)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/implicit_success_copy_constructor/index.html b/reference/types/basic_result/implicit_success_copy_constructor/index.html index 4fd9f310d6..7887cae6e6 100644 --- a/reference/types/basic_result/implicit_success_copy_constructor/index.html +++ b/reference/types/basic_result/implicit_success_copy_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_result(const success_type<T> &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/implicit_success_move_constructor/index.html b/reference/types/basic_result/implicit_success_move_constructor/index.html index 410fb65436..6858c1e826 100644 --- a/reference/types/basic_result/implicit_success_move_constructor/index.html +++ b/reference/types/basic_result/implicit_success_move_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_result(success_type<T> &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/implicit_value_converting_constructor/index.html b/reference/types/basic_result/implicit_value_converting_constructor/index.html index fdf28cc20f..5fa50faa47 100644 --- a/reference/types/basic_result/implicit_value_converting_constructor/index.html +++ b/reference/types/basic_result/implicit_value_converting_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_result(R &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/index.html b/reference/types/basic_result/index.html index be195cae88..eefa9e6c52 100644 --- a/reference/types/basic_result/index.html +++ b/reference/types/basic_result/index.html @@ -5,7 +5,7 @@ - + `basic_result<T, E, NoValuePolicy>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/inequality_basic_result/index.html b/reference/types/basic_result/inequality_basic_result/index.html index 3e71d43010..05570a9916 100644 --- a/reference/types/basic_result/inequality_basic_result/index.html +++ b/reference/types/basic_result/inequality_basic_result/index.html @@ -5,7 +5,7 @@ - + `bool operator!=(const basic_result<A, B, C> &) const` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/inequality_failure_type/index.html b/reference/types/basic_result/inequality_failure_type/index.html index b62ae4dfa5..c5e99cb095 100644 --- a/reference/types/basic_result/inequality_failure_type/index.html +++ b/reference/types/basic_result/inequality_failure_type/index.html @@ -5,7 +5,7 @@ - + `bool operator!=(const failure_type<A, void> &) const` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/inequality_success_type/index.html b/reference/types/basic_result/inequality_success_type/index.html index 26209d6aea..028a516e1c 100644 --- a/reference/types/basic_result/inequality_success_type/index.html +++ b/reference/types/basic_result/inequality_success_type/index.html @@ -5,7 +5,7 @@ - + `bool operator==(const success_type<A> &) const` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/move_assignment/index.html b/reference/types/basic_result/move_assignment/index.html index 056a9c2600..0bd7652190 100644 --- a/reference/types/basic_result/move_assignment/index.html +++ b/reference/types/basic_result/move_assignment/index.html @@ -5,7 +5,7 @@ - + `basic_result &operator=(basic_result &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/move_constructor/index.html b/reference/types/basic_result/move_constructor/index.html index 52f705cb8c..6cfe063e22 100644 --- a/reference/types/basic_result/move_constructor/index.html +++ b/reference/types/basic_result/move_constructor/index.html @@ -5,7 +5,7 @@ - + `basic_result(basic_result &&)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/operator_bool/index.html b/reference/types/basic_result/operator_bool/index.html index 7fa412c8e4..38173f0acf 100644 --- a/reference/types/basic_result/operator_bool/index.html +++ b/reference/types/basic_result/operator_bool/index.html @@ -5,7 +5,7 @@ - + `explicit operator bool() const noexcept` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/swap/index.html b/reference/types/basic_result/swap/index.html index 448cb30a04..11a13e5304 100644 --- a/reference/types/basic_result/swap/index.html +++ b/reference/types/basic_result/swap/index.html @@ -5,7 +5,7 @@ - + `void swap(basic_result &)` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/value_lvalue/index.html b/reference/types/basic_result/value_lvalue/index.html index 1a1d3ed915..9fb520a46c 100644 --- a/reference/types/basic_result/value_lvalue/index.html +++ b/reference/types/basic_result/value_lvalue/index.html @@ -5,7 +5,7 @@ - + `value_type &value() &` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/value_lvalue_const/index.html b/reference/types/basic_result/value_lvalue_const/index.html index bb0d2f160e..6de0175482 100644 --- a/reference/types/basic_result/value_lvalue_const/index.html +++ b/reference/types/basic_result/value_lvalue_const/index.html @@ -5,7 +5,7 @@ - + `const value_type &value() const &` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/value_rvalue/index.html b/reference/types/basic_result/value_rvalue/index.html index aef5b7e8f5..7ca9b4a807 100644 --- a/reference/types/basic_result/value_rvalue/index.html +++ b/reference/types/basic_result/value_rvalue/index.html @@ -5,7 +5,7 @@ - + `value_type &&value() &&` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/basic_result/value_rvalue_const/index.html b/reference/types/basic_result/value_rvalue_const/index.html index de857601fd..4fcd4423a1 100644 --- a/reference/types/basic_result/value_rvalue_const/index.html +++ b/reference/types/basic_result/value_rvalue_const/index.html @@ -5,7 +5,7 @@ - + `const value_type &&value() const &&` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/failure_type/index.html b/reference/types/failure_type/index.html index a4613d2cbe..548fb13900 100644 --- a/reference/types/failure_type/index.html +++ b/reference/types/failure_type/index.html @@ -5,7 +5,7 @@ - + `failure_type<EC, EP = void>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/in_place_type_t/index.html b/reference/types/in_place_type_t/index.html index d7d3281ad9..f1cd8cedb9 100644 --- a/reference/types/in_place_type_t/index.html +++ b/reference/types/in_place_type_t/index.html @@ -5,7 +5,7 @@ - + `in_place_type_t<T>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/index.html b/reference/types/index.html index 0011f77d71..21be338cc4 100644 --- a/reference/types/index.html +++ b/reference/types/index.html @@ -5,7 +5,7 @@ - + Types :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/reference/types/success_type/index.html b/reference/types/success_type/index.html index af2dc1da74..d3e1e810ab 100644 --- a/reference/types/success_type/index.html +++ b/reference/types/success_type/index.html @@ -5,7 +5,7 @@ - + `success_type<T>` :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/requirements/index.html b/requirements/index.html index a74bbc8439..efab32f7c7 100644 --- a/requirements/index.html +++ b/requirements/index.html @@ -5,7 +5,7 @@ - + Prerequisites :: Outcome documentation @@ -193,121 +193,6 @@ Before we begin -
  • -
  • -
    - result<> -
    - -
  • -
  • -
    - outcome<> -
    - -
  • -
  • - - -
  • -
  • - - -
  • -
  • -
  • @@ -597,108 +482,153 @@ status_result and status_outcome + +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/sitemap.xml b/sitemap.xml index d091dfd597..d1002ba444 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -24,7 +24,7 @@ https://ned14.github.io/outcome/experimental/advantages/ - 2019-02-05T21:41:47+00:00 + 2024-07-16T21:33:35+01:00 @@ -57,14 +57,19 @@ 2020-12-16T14:14:42+00:00 + + https://ned14.github.io/outcome/experimental/c-api/from-c/system_code/ + 2024-07-17T17:54:05+01:00 + + https://ned14.github.io/outcome/tutorial/essential/coroutines/try/ 2020-04-07T10:22:38+01:00 - https://ned14.github.io/outcome/experimental/worked-example/preamble/ - 2019-01-26T23:38:56+00:00 + https://ned14.github.io/outcome/experimental/worked-example-long/preamble/ + 2024-07-16T21:33:35+01:00 @@ -78,13 +83,13 @@ - https://ned14.github.io/outcome/tutorial/advanced/hooks/keeping_state/ - 2019-02-08T22:18:08+00:00 + https://ned14.github.io/outcome/experimental/worked-example/implicit-construction/ + 2024-07-16T21:33:35+01:00 - https://ned14.github.io/outcome/experimental/c-api/limitations/ - 2019-02-05T17:14:18+00:00 + https://ned14.github.io/outcome/tutorial/advanced/hooks/keeping_state/ + 2019-02-08T22:18:08+00:00 @@ -162,6 +167,11 @@ 2019-02-09T15:18:26+00:00 + + https://ned14.github.io/outcome/experimental/c-api/from-cxx/ + 2024-07-16T21:33:35+01:00 + + https://ned14.github.io/outcome/reference/concepts/ 2018-12-11T14:56:04+00:00 @@ -173,8 +183,13 @@ - https://ned14.github.io/outcome/experimental/c-api/example/ - 2019-02-05T17:14:18+00:00 + https://ned14.github.io/outcome/experimental/c-api/from-c/declare/ + 2024-07-16T21:33:35+01:00 + + + + https://ned14.github.io/outcome/experimental/c-api/from-cxx/example/ + 2024-07-16T21:33:35+01:00 @@ -193,8 +208,8 @@ - https://ned14.github.io/outcome/experimental/worked-example/value_type/ - 2019-01-26T23:38:56+00:00 + https://ned14.github.io/outcome/experimental/worked-example-long/value_type/ + 2024-07-16T21:33:35+01:00 @@ -243,8 +258,13 @@ - https://ned14.github.io/outcome/experimental/c-api/example2/ - 2019-02-05T17:14:18+00:00 + https://ned14.github.io/outcome/experimental/c-api/from-c/ + 2024-07-17T17:54:05+01:00 + + + + https://ned14.github.io/outcome/experimental/c-api/from-cxx/example2/ + 2024-07-16T21:33:35+01:00 @@ -303,8 +323,8 @@ - https://ned14.github.io/outcome/experimental/worked-example/constructor/ - 2019-01-26T23:38:56+00:00 + https://ned14.github.io/outcome/experimental/worked-example-long/constructor/ + 2024-07-16T21:33:35+01:00 @@ -312,6 +332,11 @@ 2018-12-13T17:36:11+00:00 + + https://ned14.github.io/outcome/experimental/c-api/from-c/use/ + 2024-07-16T21:33:35+01:00 + + https://ned14.github.io/outcome/alternatives/expected/ 2022-01-10T14:29:13+00:00 @@ -363,8 +388,13 @@ - https://ned14.github.io/outcome/experimental/worked-example/string_ref/ - 2019-01-26T23:38:56+00:00 + https://ned14.github.io/outcome/experimental/worked-example-long/string_ref/ + 2024-07-16T21:33:35+01:00 + + + + https://ned14.github.io/outcome/experimental/c-api/from-c/try/ + 2024-07-16T21:33:35+01:00 @@ -402,11 +432,6 @@ 2019-06-24T21:48:18+01:00 - - https://ned14.github.io/outcome/experimental/c-api/reference/ - 2020-12-17T11:27:06+00:00 - - https://ned14.github.io/outcome/tutorial/advanced/hooks/hook_outcome/ 2020-12-15T12:22:39+00:00 @@ -433,8 +458,8 @@ - https://ned14.github.io/outcome/experimental/worked-example/message/ - 2019-01-26T23:38:56+00:00 + https://ned14.github.io/outcome/experimental/worked-example-long/message/ + 2024-07-16T21:33:35+01:00 @@ -473,8 +498,8 @@ - https://ned14.github.io/outcome/experimental/worked-example/source/ - 2019-01-26T23:38:56+00:00 + https://ned14.github.io/outcome/experimental/worked-example-long/source/ + 2024-07-16T21:33:35+01:00 @@ -488,8 +513,13 @@ - https://ned14.github.io/outcome/experimental/worked-example/implicit_conversion/ - 2019-01-26T23:38:56+00:00 + https://ned14.github.io/outcome/experimental/worked-example-long/implicit_conversion/ + 2024-07-16T21:33:35+01:00 + + + + https://ned14.github.io/outcome/experimental/outcome/ + 2024-07-16T21:33:35+01:00 @@ -508,13 +538,13 @@ - https://ned14.github.io/outcome/experimental/outcome/ - 2019-02-05T17:14:18+00:00 + https://ned14.github.io/outcome/experimental/worked-example/ + 2024-07-16T21:33:35+01:00 - https://ned14.github.io/outcome/experimental/worked-example/ - 2019-01-26T23:38:56+00:00 + https://ned14.github.io/outcome/experimental/worked-example-long/ + 2024-07-16T21:33:35+01:00 @@ -1548,7 +1578,7 @@ https://ned14.github.io/outcome/ - 2022-03-18T14:45:32+00:00 + 2024-07-16T21:33:35+01:00 diff --git a/tags/adl-bridging/index.html b/tags/adl-bridging/index.html index 66a8126d60..95a3c6d4f0 100644 --- a/tags/adl-bridging/index.html +++ b/tags/adl-bridging/index.html @@ -5,7 +5,7 @@ - + Adl Bridging :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/asio/index.html b/tags/asio/index.html index 3a8295dddf..1d274c479f 100644 --- a/tags/asio/index.html +++ b/tags/asio/index.html @@ -5,7 +5,7 @@ - + Asio :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/awaitables/index.html b/tags/awaitables/index.html index f78e57dd45..cd6f36c79f 100644 --- a/tags/awaitables/index.html +++ b/tags/awaitables/index.html @@ -5,7 +5,7 @@ - + Awaitables :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/backtrace/index.html b/tags/backtrace/index.html index dbda3a28a5..a81a775b75 100644 --- a/tags/backtrace/index.html +++ b/tags/backtrace/index.html @@ -5,7 +5,7 @@ - + Backtrace :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/best-practice/index.html b/tags/best-practice/index.html index 77debd6424..adac3ff168 100644 --- a/tags/best-practice/index.html +++ b/tags/best-practice/index.html @@ -5,7 +5,7 @@ - + Best Practice :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/co_await/index.html b/tags/co_await/index.html index 5f710548ce..2325d8f8e3 100644 --- a/tags/co_await/index.html +++ b/tags/co_await/index.html @@ -5,7 +5,7 @@ - + Co_await :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/constructors/index.html b/tags/constructors/index.html index 3eaaf44c0b..0002354ef9 100644 --- a/tags/constructors/index.html +++ b/tags/constructors/index.html @@ -5,7 +5,7 @@ - + Constructors :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/conventions/index.html b/tags/conventions/index.html index fad4b9773a..abf0522cfb 100644 --- a/tags/conventions/index.html +++ b/tags/conventions/index.html @@ -5,7 +5,7 @@ - + Conventions :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/coroutines/index.html b/tags/coroutines/index.html index 7b317f7bbf..8f0e6d7826 100644 --- a/tags/coroutines/index.html +++ b/tags/coroutines/index.html @@ -5,7 +5,7 @@ - + Coroutines :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/default-actions/index.html b/tags/default-actions/index.html index 6b99b318fe..77cccac2fd 100644 --- a/tags/default-actions/index.html +++ b/tags/default-actions/index.html @@ -5,7 +5,7 @@ - + Default Actions :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/dual-api/index.html b/tags/dual-api/index.html index ed434f045e..81e60f34a6 100644 --- a/tags/dual-api/index.html +++ b/tags/dual-api/index.html @@ -5,7 +5,7 @@ - + Dual Api :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/eager/index.html b/tags/eager/index.html index f452f43b9a..eff6ce92b1 100644 --- a/tags/eager/index.html +++ b/tags/eager/index.html @@ -5,7 +5,7 @@ - + Eager :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/error/index.html b/tags/error/index.html index db75fd39de..b88ab75684 100644 --- a/tags/error/index.html +++ b/tags/error/index.html @@ -5,7 +5,7 @@ - + Error :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/exception/index.html b/tags/exception/index.html index 3b96a46f28..4696abaae1 100644 --- a/tags/exception/index.html +++ b/tags/exception/index.html @@ -5,7 +5,7 @@ - + Exception :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/has_error_code/index.html b/tags/has_error_code/index.html index acada1653f..06e21affd4 100644 --- a/tags/has_error_code/index.html +++ b/tags/has_error_code/index.html @@ -5,7 +5,7 @@ - + Has_error_code :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/hooks/index.html b/tags/hooks/index.html index ac0353000f..e425bea796 100644 --- a/tags/hooks/index.html +++ b/tags/hooks/index.html @@ -5,7 +5,7 @@ - + Hooks :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/idioms/index.html b/tags/idioms/index.html index d37ae628f3..326b3a9b28 100644 --- a/tags/idioms/index.html +++ b/tags/idioms/index.html @@ -5,7 +5,7 @@ - + Idioms :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/index.html b/tags/index.html index a4adb5b99a..284c5b4930 100644 --- a/tags/index.html +++ b/tags/index.html @@ -5,7 +5,7 @@ - + Tags :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/lazy/index.html b/tags/lazy/index.html index 1b6a0f3d0c..3beb391299 100644 --- a/tags/lazy/index.html +++ b/tags/lazy/index.html @@ -5,7 +5,7 @@ - + Lazy :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/make_error_code/index.html b/tags/make_error_code/index.html index b359d2bb2a..018c99c5f3 100644 --- a/tags/make_error_code/index.html +++ b/tags/make_error_code/index.html @@ -5,7 +5,7 @@ - + Make_error_code :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/namespace/index.html b/tags/namespace/index.html index 093497178e..4826c33a53 100644 --- a/tags/namespace/index.html +++ b/tags/namespace/index.html @@ -5,7 +5,7 @@ - + Namespace :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/networking-ts/index.html b/tags/networking-ts/index.html index 38e3e2d21c..2cfbc3fdd6 100644 --- a/tags/networking-ts/index.html +++ b/tags/networking-ts/index.html @@ -5,7 +5,7 @@ - + Networking Ts :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/nodiscard/index.html b/tags/nodiscard/index.html index 8445b0259b..1565869a62 100644 --- a/tags/nodiscard/index.html +++ b/tags/nodiscard/index.html @@ -5,7 +5,7 @@ - + Nodiscard :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/outcome/index.html b/tags/outcome/index.html index 8d8f8fd8f7..784f677762 100644 --- a/tags/outcome/index.html +++ b/tags/outcome/index.html @@ -5,7 +5,7 @@ - + Outcome :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/page/2/index.html b/tags/page/2/index.html index d9ac44763a..d69acda289 100644 --- a/tags/page/2/index.html +++ b/tags/page/2/index.html @@ -5,7 +5,7 @@ - + Tags :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/page/3/index.html b/tags/page/3/index.html index 76f24be36d..557246f50a 100644 --- a/tags/page/3/index.html +++ b/tags/page/3/index.html @@ -5,7 +5,7 @@ - + Tags :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/payload/index.html b/tags/payload/index.html index 426aca3db9..689e576e2c 100644 --- a/tags/payload/index.html +++ b/tags/payload/index.html @@ -5,7 +5,7 @@ - + Payload :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/playpen/index.html b/tags/playpen/index.html index 6358f36f08..6aa9fc316f 100644 --- a/tags/playpen/index.html +++ b/tags/playpen/index.html @@ -5,7 +5,7 @@ - + Playpen :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/policies/index.html b/tags/policies/index.html index c2fedb4c91..a8465ce767 100644 --- a/tags/policies/index.html +++ b/tags/policies/index.html @@ -5,7 +5,7 @@ - + Policies :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/result/index.html b/tags/result/index.html index 97607bc2cd..3f14ab846d 100644 --- a/tags/result/index.html +++ b/tags/result/index.html @@ -5,7 +5,7 @@ - + Result :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/try/index.html b/tags/try/index.html index d6dccb9bc2..3cff9b5ca2 100644 --- a/tags/try/index.html +++ b/tags/try/index.html @@ -5,7 +5,7 @@ - + Try :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/value-or-error/index.html b/tags/value-or-error/index.html index fb824f62af..c1090f6591 100644 --- a/tags/value-or-error/index.html +++ b/tags/value-or-error/index.html @@ -5,7 +5,7 @@ - + Value or Error :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tags/value/index.html b/tags/value/index.html index 2a3b6ab5fd..e994b1d29d 100644 --- a/tags/value/index.html +++ b/tags/value/index.html @@ -5,7 +5,7 @@ - + Value :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/constructors/file_handle/index.html b/tutorial/advanced/constructors/file_handle/index.html index 36e1a53045..380125051b 100644 --- a/tutorial/advanced/constructors/file_handle/index.html +++ b/tutorial/advanced/constructors/file_handle/index.html @@ -5,7 +5,7 @@ - + A file handle :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/constructors/index.html b/tutorial/advanced/constructors/index.html index ae72a1b74c..7810c3b253 100644 --- a/tutorial/advanced/constructors/index.html +++ b/tutorial/advanced/constructors/index.html @@ -5,7 +5,7 @@ - + Result returning constructors :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/constructors/metaprogrammg1/index.html b/tutorial/advanced/constructors/metaprogrammg1/index.html index b8b8bf992d..4ad6097813 100644 --- a/tutorial/advanced/constructors/metaprogrammg1/index.html +++ b/tutorial/advanced/constructors/metaprogrammg1/index.html @@ -5,7 +5,7 @@ - + Phase 3 :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/constructors/metaprogrammg2/index.html b/tutorial/advanced/constructors/metaprogrammg2/index.html index 915aefa3e7..73ae4c5b24 100644 --- a/tutorial/advanced/constructors/metaprogrammg2/index.html +++ b/tutorial/advanced/constructors/metaprogrammg2/index.html @@ -5,7 +5,7 @@ - + construct<T> :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/constructors/metaprogrammg3/index.html b/tutorial/advanced/constructors/metaprogrammg3/index.html index b7c3dc7794..539f484f0e 100644 --- a/tutorial/advanced/constructors/metaprogrammg3/index.html +++ b/tutorial/advanced/constructors/metaprogrammg3/index.html @@ -5,7 +5,7 @@ - + Alternatives :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/constructors/static-constructor/index.html b/tutorial/advanced/constructors/static-constructor/index.html index 12b9703650..7399b536c4 100644 --- a/tutorial/advanced/constructors/static-constructor/index.html +++ b/tutorial/advanced/constructors/static-constructor/index.html @@ -5,7 +5,7 @@ - + Phase 2 construction :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/constructors/two-phase-init/index.html b/tutorial/advanced/constructors/two-phase-init/index.html index 9f598cb54f..2e78b1d033 100644 --- a/tutorial/advanced/constructors/two-phase-init/index.html +++ b/tutorial/advanced/constructors/two-phase-init/index.html @@ -5,7 +5,7 @@ - + Two phase construction :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • +
  • +
  • + +
  • -
  • +
  • + + +
  • +
  • @@ -2800,32 +2845,6 @@ Future ABI stability guarantees - - - - - - - - - - - - - - diff --git a/tutorial/advanced/hooks/adl_bridging/index.html b/tutorial/advanced/hooks/adl_bridging/index.html index 01fcd9082d..34537e60e7 100644 --- a/tutorial/advanced/hooks/adl_bridging/index.html +++ b/tutorial/advanced/hooks/adl_bridging/index.html @@ -5,7 +5,7 @@ - + ADL bridging :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/hooks/hook_outcome/index.html b/tutorial/advanced/hooks/hook_outcome/index.html index cd8f3dab64..d022d9b566 100644 --- a/tutorial/advanced/hooks/hook_outcome/index.html +++ b/tutorial/advanced/hooks/hook_outcome/index.html @@ -5,7 +5,7 @@ - + Hook outcome :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/hooks/hook_result/index.html b/tutorial/advanced/hooks/hook_result/index.html index 1be6fedd81..24f0ef5aa1 100644 --- a/tutorial/advanced/hooks/hook_result/index.html +++ b/tutorial/advanced/hooks/hook_result/index.html @@ -5,7 +5,7 @@ - + Hook result :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/hooks/index.html b/tutorial/advanced/hooks/index.html index be95d34bff..d7fecc0c82 100644 --- a/tutorial/advanced/hooks/index.html +++ b/tutorial/advanced/hooks/index.html @@ -5,7 +5,7 @@ - + Hooking events :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/hooks/keeping_state/index.html b/tutorial/advanced/hooks/keeping_state/index.html index 19352f45bc..a1110a8064 100644 --- a/tutorial/advanced/hooks/keeping_state/index.html +++ b/tutorial/advanced/hooks/keeping_state/index.html @@ -5,7 +5,7 @@ - + Keeping state :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/hooks/poke_exception/index.html b/tutorial/advanced/hooks/poke_exception/index.html index ea4455a89d..1ace7da8b7 100644 --- a/tutorial/advanced/hooks/poke_exception/index.html +++ b/tutorial/advanced/hooks/poke_exception/index.html @@ -5,7 +5,7 @@ - + Custom exception ptr :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/index.html b/tutorial/advanced/index.html index 9102d3d3bd..89a4acdbac 100644 --- a/tutorial/advanced/index.html +++ b/tutorial/advanced/index.html @@ -5,7 +5,7 @@ - + Advanced :: Outcome documentation @@ -599,108 +599,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/interop/app-go/index.html b/tutorial/advanced/interop/app-go/index.html index 7a0a65837a..ccdc706ecf 100644 --- a/tutorial/advanced/interop/app-go/index.html +++ b/tutorial/advanced/interop/app-go/index.html @@ -5,7 +5,7 @@ - + In use :: Outcome documentation @@ -354,48 +354,6 @@ Result returning constructors
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/interop/app-map-filelib/index.html b/tutorial/advanced/interop/app-map-filelib/index.html index 0631eedeb6..271f1be158 100644 --- a/tutorial/advanced/interop/app-map-filelib/index.html +++ b/tutorial/advanced/interop/app-map-filelib/index.html @@ -5,7 +5,7 @@ - + Mapping the File I/O library into the Application :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/interop/app-map-httplib1/index.html b/tutorial/advanced/interop/app-map-httplib1/index.html index bc09e618bb..832844392b 100644 --- a/tutorial/advanced/interop/app-map-httplib1/index.html +++ b/tutorial/advanced/interop/app-map-httplib1/index.html @@ -5,7 +5,7 @@ - + Mapping the HTTP library into the Application `1/2` :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/interop/app-map-httplib2/index.html b/tutorial/advanced/interop/app-map-httplib2/index.html index db2a9598b6..d33ed48f5d 100644 --- a/tutorial/advanced/interop/app-map-httplib2/index.html +++ b/tutorial/advanced/interop/app-map-httplib2/index.html @@ -5,7 +5,7 @@ - + Mapping the HTTP library into the Application `2/2` :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/interop/app-map-tidylib/index.html b/tutorial/advanced/interop/app-map-tidylib/index.html index 92fbb9b9bc..7293648080 100644 --- a/tutorial/advanced/interop/app-map-tidylib/index.html +++ b/tutorial/advanced/interop/app-map-tidylib/index.html @@ -5,7 +5,7 @@ - + Mapping the HTMLTidy library into the Application :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/interop/app/index.html b/tutorial/advanced/interop/app/index.html index 00087db24d..38cb659923 100644 --- a/tutorial/advanced/interop/app/index.html +++ b/tutorial/advanced/interop/app/index.html @@ -5,7 +5,7 @@ - + The Application :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/interop/conclusion/index.html b/tutorial/advanced/interop/conclusion/index.html index 27cfaf2906..765ca3db59 100644 --- a/tutorial/advanced/interop/conclusion/index.html +++ b/tutorial/advanced/interop/conclusion/index.html @@ -5,7 +5,7 @@ - + Conclusion :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/interop/filelib/index.html b/tutorial/advanced/interop/filelib/index.html index 21fcbe5ebd..44c67b8067 100644 --- a/tutorial/advanced/interop/filelib/index.html +++ b/tutorial/advanced/interop/filelib/index.html @@ -5,7 +5,7 @@ - + The File I/O library :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/interop/httplib/index.html b/tutorial/advanced/interop/httplib/index.html index beaf9e5c7a..4185213009 100644 --- a/tutorial/advanced/interop/httplib/index.html +++ b/tutorial/advanced/interop/httplib/index.html @@ -5,7 +5,7 @@ - + The HTTP library :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/interop/index.html b/tutorial/advanced/interop/index.html index 43d84d2d88..ca92d1355d 100644 --- a/tutorial/advanced/interop/index.html +++ b/tutorial/advanced/interop/index.html @@ -5,7 +5,7 @@ - + Interoperation :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/interop/problem/index.html b/tutorial/advanced/interop/problem/index.html index d17564a7f4..8247bd09e3 100644 --- a/tutorial/advanced/interop/problem/index.html +++ b/tutorial/advanced/interop/problem/index.html @@ -5,7 +5,7 @@ - + Incommensurate E types :: Outcome documentation @@ -195,230 +195,130 @@
  • - - -
  • -
    - Advanced - -
    -
  • +
  • +
    + Advanced + +
    +
  • @@ -485,108 +385,153 @@ status_result and status_outcome + +
  • +
  • +
  • +
  • + +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/interop/tidylib/index.html b/tutorial/advanced/interop/tidylib/index.html index 5f6fc67fd5..2475b25c04 100644 --- a/tutorial/advanced/interop/tidylib/index.html +++ b/tutorial/advanced/interop/tidylib/index.html @@ -5,7 +5,7 @@ - + The HTMLTidy library :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/interop/value-or-error/index.html b/tutorial/advanced/interop/value-or-error/index.html index 66cae6a08e..c06d69289d 100644 --- a/tutorial/advanced/interop/value-or-error/index.html +++ b/tutorial/advanced/interop/value-or-error/index.html @@ -5,7 +5,7 @@ - + value_or_error Concept :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/payload/copy_file/index.html b/tutorial/advanced/payload/copy_file/index.html index 8f641ff778..5d3a190429 100644 --- a/tutorial/advanced/payload/copy_file/index.html +++ b/tutorial/advanced/payload/copy_file/index.html @@ -5,7 +5,7 @@ - + The Filesystem TS :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/payload/copy_file2/index.html b/tutorial/advanced/payload/copy_file2/index.html index 1fe26e278a..c26095e82e 100644 --- a/tutorial/advanced/payload/copy_file2/index.html +++ b/tutorial/advanced/payload/copy_file2/index.html @@ -5,7 +5,7 @@ - + Upgrading the Filesystem TS :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/payload/copy_file3/index.html b/tutorial/advanced/payload/copy_file3/index.html index f9fa9bb7f9..73e3494cf7 100644 --- a/tutorial/advanced/payload/copy_file3/index.html +++ b/tutorial/advanced/payload/copy_file3/index.html @@ -5,7 +5,7 @@ - + Auto-throwing filesystem_error :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/advanced/payload/index.html b/tutorial/advanced/payload/index.html index 287d6d717f..51ffa6d844 100644 --- a/tutorial/advanced/payload/index.html +++ b/tutorial/advanced/payload/index.html @@ -5,7 +5,7 @@ - + Custom payloads :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/essential/before/index.html b/tutorial/essential/before/index.html index d09ad7789e..443d06da4b 100644 --- a/tutorial/essential/before/index.html +++ b/tutorial/essential/before/index.html @@ -5,7 +5,7 @@ - + Before we begin :: Outcome documentation @@ -599,108 +599,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/essential/conventions/index.html b/tutorial/essential/conventions/index.html index 85775e7df4..ff40b2ad56 100644 --- a/tutorial/essential/conventions/index.html +++ b/tutorial/essential/conventions/index.html @@ -5,7 +5,7 @@ - + Conventions :: Outcome documentation @@ -599,108 +599,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/essential/coroutines/awaitables/index.html b/tutorial/essential/coroutines/awaitables/index.html index 86a216a9f3..6877790802 100644 --- a/tutorial/essential/coroutines/awaitables/index.html +++ b/tutorial/essential/coroutines/awaitables/index.html @@ -5,7 +5,7 @@ - + Coroutine awaitables :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/essential/coroutines/co_await/index.html b/tutorial/essential/coroutines/co_await/index.html index fb28e0c542..bf83af54b3 100644 --- a/tutorial/essential/coroutines/co_await/index.html +++ b/tutorial/essential/coroutines/co_await/index.html @@ -5,7 +5,7 @@ - + `operator co_await` as TRY operator :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/essential/coroutines/index.html b/tutorial/essential/coroutines/index.html index 18c862976b..6aa821fa41 100644 --- a/tutorial/essential/coroutines/index.html +++ b/tutorial/essential/coroutines/index.html @@ -5,7 +5,7 @@ - + Coroutines :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/essential/coroutines/returning/index.html b/tutorial/essential/coroutines/returning/index.html index 7568a9c90e..688dab083f 100644 --- a/tutorial/essential/coroutines/returning/index.html +++ b/tutorial/essential/coroutines/returning/index.html @@ -5,7 +5,7 @@ - + Returning Outcome types from Coroutines :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/essential/coroutines/try/index.html b/tutorial/essential/coroutines/try/index.html index e48e4962c6..a3e1858e12 100644 --- a/tutorial/essential/coroutines/try/index.html +++ b/tutorial/essential/coroutines/try/index.html @@ -5,7 +5,7 @@ - + Coroutine TRY operation :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/essential/index.html b/tutorial/essential/index.html index 592feeb280..87073b6b79 100644 --- a/tutorial/essential/index.html +++ b/tutorial/essential/index.html @@ -5,7 +5,7 @@ - + Essential :: Outcome documentation @@ -599,108 +599,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/essential/no-value/builtin/index.html b/tutorial/essential/no-value/builtin/index.html index 797534c7d1..d7c5576e2e 100644 --- a/tutorial/essential/no-value/builtin/index.html +++ b/tutorial/essential/no-value/builtin/index.html @@ -5,7 +5,7 @@ - + Built-in policies :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/essential/no-value/custom/index.html b/tutorial/essential/no-value/custom/index.html index d048e18d37..8d3bddf411 100644 --- a/tutorial/essential/no-value/custom/index.html +++ b/tutorial/essential/no-value/custom/index.html @@ -5,7 +5,7 @@ - + A custom no-value policy :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/essential/no-value/index.html b/tutorial/essential/no-value/index.html index 210c4017a9..57ae5d32e4 100644 --- a/tutorial/essential/no-value/index.html +++ b/tutorial/essential/no-value/index.html @@ -5,7 +5,7 @@ - + No-value policies :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/essential/outcome/index.html b/tutorial/essential/outcome/index.html index 44888d4b12..ef9515cb1c 100644 --- a/tutorial/essential/outcome/index.html +++ b/tutorial/essential/outcome/index.html @@ -5,7 +5,7 @@ - + outcome<> :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/essential/outcome/inspecting/index.html b/tutorial/essential/outcome/inspecting/index.html index 34c6596ae5..996d72e584 100644 --- a/tutorial/essential/outcome/inspecting/index.html +++ b/tutorial/essential/outcome/inspecting/index.html @@ -5,7 +5,7 @@ - + Inspecting outcome<T, EC, EP> :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/essential/result/index.html b/tutorial/essential/result/index.html index 6fb1254db8..53854f4677 100644 --- a/tutorial/essential/result/index.html +++ b/tutorial/essential/result/index.html @@ -5,7 +5,7 @@ - + result<> :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/essential/result/inspecting/index.html b/tutorial/essential/result/inspecting/index.html index 3f3a2403b7..5ba449f28d 100644 --- a/tutorial/essential/result/inspecting/index.html +++ b/tutorial/essential/result/inspecting/index.html @@ -5,7 +5,7 @@ - + Inspecting result<T, EC> :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/essential/result/try/index.html b/tutorial/essential/result/try/index.html index bed2cd966e..67343c34e4 100644 --- a/tutorial/essential/result/try/index.html +++ b/tutorial/essential/result/try/index.html @@ -5,7 +5,7 @@ - + TRY operations :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/essential/result/try_greedy/index.html b/tutorial/essential/result/try_greedy/index.html index 063589f32d..1765589817 100644 --- a/tutorial/essential/result/try_greedy/index.html +++ b/tutorial/essential/result/try_greedy/index.html @@ -5,7 +5,7 @@ - + TRY is greedy :: Outcome documentation @@ -600,108 +600,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/essential/result/try_ref/index.html b/tutorial/essential/result/try_ref/index.html index 8a6706c047..041e7e9a8d 100644 --- a/tutorial/essential/result/try_ref/index.html +++ b/tutorial/essential/result/try_ref/index.html @@ -5,7 +5,7 @@ - + TRY avoiding copy/move :: Outcome documentation @@ -405,6 +405,41 @@ Hooking events
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/tutorial/index.html b/tutorial/index.html index 997c16ee3f..9a93ef93d3 100644 --- a/tutorial/index.html +++ b/tutorial/index.html @@ -5,7 +5,7 @@ - + Tutorial :: Outcome documentation @@ -598,108 +598,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +
  • diff --git a/videos/index.html b/videos/index.html index 63127ba885..6673618c24 100644 --- a/videos/index.html +++ b/videos/index.html @@ -5,7 +5,7 @@ - + Videos :: Outcome documentation @@ -597,108 +597,153 @@ status_result and status_outcome +
  • +
  • +
  • + +
  • +
  • +
  • -
  • +
  • + + +
  • +