Lines Matching refs:optional
18 * An empty optional is represented with `nullopt`.
30 * Simple drop-in replacement for std::optional until we move to C++17. This does not have all of
31 * std::optional's capabilities, but it covers our needs for the time being.
34 class optional {
36 optional(const T& value)
41 optional(T&& value)
46 optional() {}
48 optional(const optional& other) {
53 optional(nullopt_t) : optional() {}
55 // We need a non-const copy constructor because otherwise optional(nonConstSrc) isn't an exact
57 optional(optional& other) {
61 optional(optional&& other) {
66 optional(Args&&... args) {
71 ~optional() {
75 optional& operator=(const optional& other) {
95 optional& operator=(optional&& other) {
116 optional& emplace(Args&&... args) {
124 optional& emplace(std::initializer_list<U> il, Args&&... args) {
132 optional& operator=(nullopt_t) {
222 // Comparison operators for optional x optional
223 template <typename T, typename U> bool operator==(const optional<T>& a, const optional<U>& b) {
229 template <typename T, typename U> bool operator!=(const optional<T>& a, const optional<U>& b) {
235 template <typename T, typename U> bool operator<(const optional<T>& a, const optional<U>& b) {
241 template <typename T, typename U> bool operator<=(const optional<T>& a, const optional<U>& b) {
247 template <typename T, typename U> bool operator>(const optional<T>& a, const optional<U>& b) {
253 template <typename T, typename U> bool operator>=(const optional<T>& a, const optional<U>& b) {
259 // Comparison operators for optional x nullopt
260 template <typename T> bool operator==(const optional<T>& a, nullopt_t) {
264 template <typename T> bool operator!=(const optional<T>& a, nullopt_t) {
268 template <typename T> bool operator<(const optional<T>&, nullopt_t) {
272 template <typename T> bool operator<=(const optional<T>& a, nullopt_t) {
276 template <typename T> bool operator>(const optional<T>& a, nullopt_t) {
281 bool operator>=(const optional<T>&, nullopt_t) {
285 // Comparison operators for nullopt x optional
286 template <typename U> bool operator==(nullopt_t, const optional<U>& b) {
290 template <typename U> bool operator!=(nullopt_t, const optional<U>& b) {
294 template <typename U> bool operator<(nullopt_t, const optional<U>& b) {
298 template <typename U> bool operator<=(nullopt_t, const optional<U>&) {
302 template <typename U> bool operator>(nullopt_t, const optional<U>&) {
306 template <typename U> bool operator>=(nullopt_t, const optional<U>& b) {
310 // Comparison operators for optional x value
311 template <typename T, typename U> bool operator==(const optional<T>& a, const U& b) {
315 template <typename T, typename U> bool operator!=(const optional<T>& a, const U& b) {
319 template <typename T, typename U> bool operator<(const optional<T>& a, const U& b) {
323 template <typename T, typename U> bool operator<=(const optional<T>& a, const U& b) {
327 template <typename T, typename U> bool operator>(const optional<T>& a, const U& b) {
331 template <typename T, typename U> bool operator>=(const optional<T>& a, const U& b) {
335 // Comparison operators for value x optional
336 template <typename T, typename U> bool operator==(const T& a, const optional<U>& b) {
340 template <typename T, typename U> bool operator!=(const T& a, const optional<U>& b) {
344 template <typename T, typename U> bool operator<(const T& a, const optional<U>& b) {
348 template <typename T, typename U> bool operator<=(const T& a, const optional<U>& b) {
352 template <typename T, typename U> bool operator>(const T& a, const optional<U>& b) {
356 template <typename T, typename U> bool operator>=(const T& a, const optional<U>& b) {