template <class T>
void Try<T>::throwIfFailed() const {
- if (contains_ != Contains::VALUE) {
- if (contains_ == Contains::EXCEPTION) {
+ switch (contains_) {
+ case Contains::VALUE:
+ return;
+ case Contains::EXCEPTION:
e_.throw_exception();
- } else {
- throw UsingUninitializedTry();
- }
+ default:
+ try_detail::throwUsingUninitializedTry();
}
}
--- /dev/null
+/*
+ * Copyright 2004-present Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <folly/Try.h>
+
+namespace folly {
+
+namespace try_detail {
+[[noreturn]] void throwTryDoesNotContainException() {
+ throw TryException("exception(): Try does not contain an exception");
+}
+
+[[noreturn]] void throwUsingUninitializedTry() {
+ throw UsingUninitializedTry();
+}
+} // namespace try_detail
+
+} // namespace folly
UsingUninitializedTry() : TryException("Using uninitialized try") {}
};
+namespace try_detail {
+[[noreturn]] void throwTryDoesNotContainException();
+[[noreturn]] void throwUsingUninitializedTry();
+} // namespace try_detail
+
/*
* Try<T> is a wrapper that contains either an instance of T, an exception, or
* nothing. Exceptions are stored as exception_wrappers so that the user can
}
exception_wrapper& exception() {
- if (UNLIKELY(!hasException())) {
- throw TryException("exception(): Try does not contain an exception");
+ if (!hasException()) {
+ try_detail::throwTryDoesNotContainException();
}
return e_;
}
const exception_wrapper& exception() const {
- if (UNLIKELY(!hasException())) {
- throw TryException("exception(): Try does not contain an exception");
+ if (!hasException()) {
+ try_detail::throwTryDoesNotContainException();
}
return e_;
}
* @returns mutable reference to the exception contained by this Try
*/
exception_wrapper& exception() {
- if (UNLIKELY(!hasException())) {
- throw TryException("exception(): Try does not contain an exception");
+ if (!hasException()) {
+ try_detail::throwTryDoesNotContainException();
}
return e_;
}
const exception_wrapper& exception() const {
- if (UNLIKELY(!hasException())) {
- throw TryException("exception(): Try does not contain an exception");
+ if (!hasException()) {
+ try_detail::throwTryDoesNotContainException();
}
return e_;
}