1 #ifndef LLVM_CLANG_TOOLS_EXTRA_TEST_CLANG_TIDY_CHECKERS_BUGPRONE_INPUTS_UNCHECKED_OPTIONAL_ACCESS_FOLLY_TYPES_OPTIONAL_H_ 2 #define LLVM_CLANG_TOOLS_EXTRA_TEST_CLANG_TIDY_CHECKERS_BUGPRONE_INPUTS_UNCHECKED_OPTIONAL_ACCESS_FOLLY_TYPES_OPTIONAL_H_ 3 4 /// Mock of `folly::Optional`. 5 namespace folly { 6 7 struct None { NoneNone8 constexpr explicit None() {} 9 }; 10 11 constexpr None none; 12 13 template <typename T> 14 class Optional { 15 public: 16 constexpr Optional() noexcept; 17 18 constexpr Optional(None) noexcept; 19 20 Optional(const Optional &) = default; 21 22 Optional(Optional &&) = default; 23 24 const T &operator*() const &; 25 T &operator*() &; 26 const T &&operator*() const &&; 27 T &&operator*() &&; 28 29 const T *operator->() const; 30 T *operator->(); 31 32 const T &value() const &; 33 T &value() &; 34 const T &&value() const &&; 35 T &&value() &&; 36 37 constexpr explicit operator bool() const noexcept; 38 constexpr bool has_value() const noexcept; 39 constexpr bool hasValue() const noexcept; 40 41 template <typename U> 42 constexpr T value_or(U &&v) const &; 43 template <typename U> 44 T value_or(U &&v) &&; 45 46 template <typename... Args> 47 T &emplace(Args &&...args); 48 49 void reset() noexcept; 50 51 void swap(Optional &rhs) noexcept; 52 }; 53 54 } // namespace folly 55 56 #endif // LLVM_CLANG_TOOLS_EXTRA_TEST_CLANG_TIDY_CHECKERS_BUGPRONE_INPUTS_UNCHECKED_OPTIONAL_ACCESS_FOLLY_TYPES_OPTIONAL_H_ 57