Make Expected presume it has a value and not an Error
authorPhil Willoughby <philwill@fb.com>
Thu, 2 Nov 2017 22:38:42 +0000 (15:38 -0700)
committerFacebook Github Bot <facebook-github-bot@users.noreply.github.com>
Thu, 2 Nov 2017 22:53:01 +0000 (15:53 -0700)
Summary: This only affects instruction ordering in GCC-compatible compilers to make the value-having branch preferred.

Reviewed By: davidtgoldblatt, nbronson, yfeldblum

Differential Revision: D6223188

fbshipit-source-id: 57c69b88eda7ee769912874921c45b47ec7a38de

folly/Expected.h

index 945797bc5e409252de708e727af14104188ebd4b..f15010dfe821600c58c1221e6739870b743af1f5 100644 (file)
@@ -1106,11 +1106,11 @@ class Expected final : expected_detail::ExpectedStorage<Value, Error> {
    * Accessors
    */
   constexpr bool hasValue() const noexcept {
-    return expected_detail::Which::eValue == this->which_;
+    return LIKELY(expected_detail::Which::eValue == this->which_);
   }
 
   constexpr bool hasError() const noexcept {
-    return expected_detail::Which::eError == this->which_;
+    return UNLIKELY(expected_detail::Which::eError == this->which_);
   }
 
   using Base::uninitializedByException;