[PATCH] D105014: added some example code for llvm::Expected<T>

Christian Kühnel via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Jun 28 05:30:16 PDT 2021


kuhnel updated this revision to Diff 354855.
kuhnel added a comment.

undo of auto formatting


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D105014/new/

https://reviews.llvm.org/D105014

Files:
  llvm/include/llvm/Support/Error.h


Index: llvm/include/llvm/Support/Error.h
===================================================================
--- llvm/include/llvm/Support/Error.h
+++ llvm/include/llvm/Support/Error.h
@@ -436,6 +436,49 @@
 /// Error cannot be copied, this class replaces getError() with
 /// takeError(). It also adds an bool errorIsA<ErrT>() method for testing the
 /// error class type.
+///
+/// Example usage of 'Expected<T>' as a return type:
+///
+///   @code{.cpp}
+///     Expected<int> myDivide(int A, int B) {
+///       if (B == 0) {
+///         // return an Error
+///         return error("B must not be zero!");
+///       }
+///       // return an integer
+///       return A / B;
+///     }
+///   @endcode
+///
+///   Checking the results of to a function returning 'Expected<T>':
+///   @code{.cpp}
+///     auto Result = myDivide(X,Y);
+///     if (!Result) {
+///       auto Error = Result.takeError();
+///       // handle the error case here
+///     } else {
+///       // handle good case here
+///     }
+///
+///   @endcode
+///
+///  Unit-testing a function returning an 'Expceted<T>':
+///   @code{.cpp}
+///   TEST(MyTests, ExpectedDemo) {
+///     auto Passed = myDivide(10, 5);
+///     // check this call has passed, this also prints the error message
+///     // if the function returns an Error
+///     ASSERT_TRUE((bool)Passed) << llvm::toString(Passed.takeError());
+///     // checked the returned value
+///     ASSERT_EQ(2, *Passed);
+///
+///     auto Failed = myDivide(1, 0);
+///     ASSERT_FALSE((bool)Failed);
+///     // make sure Failed.takeError() does not get remove by the optimizer
+///     std::cout << "Expected failure: " << llvm::toString(Failed.takeError());
+///   }
+///   @endcode
+
 template <class T> class LLVM_NODISCARD Expected {
   template <class T1> friend class ExpectedAsOutParameter;
   template <class OtherT> friend class Expected;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D105014.354855.patch
Type: text/x-patch
Size: 1889 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210628/686178cb/attachment-0001.bin>


More information about the cfe-commits mailing list