|
68 | 68 | #include <type_traits> |
69 | 69 | #include <utility> |
70 | 70 |
|
| 71 | +#include <folly/CppAttributes.h> |
71 | 72 | #include <folly/Portability.h> |
72 | 73 | #include <folly/Traits.h> |
73 | 74 | #include <folly/Utility.h> |
@@ -467,22 +468,22 @@ class Optional : private detail::OptionalCopyAssignBase<Value> { |
467 | 468 |
|
468 | 469 | /// Get the value. Must have value. |
469 | 470 | /// @methodset Getters |
470 | | - constexpr const Value& value() const& { |
| 471 | + constexpr const Value& value() const& [[FOLLY_ATTR_CLANG_LIFETIMEBOUND]] { |
471 | 472 | require_value(); |
472 | 473 | return this->storage_.value; |
473 | 474 | } |
474 | 475 |
|
475 | | - constexpr Value& value() & { |
| 476 | + constexpr Value& value() & [[FOLLY_ATTR_CLANG_LIFETIMEBOUND]] { |
476 | 477 | require_value(); |
477 | 478 | return this->storage_.value; |
478 | 479 | } |
479 | 480 |
|
480 | | - constexpr Value&& value() && { |
| 481 | + constexpr Value&& value() && [[FOLLY_ATTR_CLANG_LIFETIMEBOUND]] { |
481 | 482 | require_value(); |
482 | 483 | return std::move(this->storage_.value); |
483 | 484 | } |
484 | 485 |
|
485 | | - constexpr const Value&& value() const&& { |
| 486 | + constexpr const Value&& value() const&& [[FOLLY_ATTR_CLANG_LIFETIMEBOUND]] { |
486 | 487 | require_value(); |
487 | 488 | return std::move(this->storage_.value); |
488 | 489 | } |
@@ -511,15 +512,28 @@ class Optional : private detail::OptionalCopyAssignBase<Value> { |
511 | 512 |
|
512 | 513 | /// Get the value. Must have value. |
513 | 514 | /// @methodset Getters |
514 | | - constexpr const Value& operator*() const& { return value(); } |
515 | | - constexpr Value& operator*() & { return value(); } |
516 | | - constexpr const Value&& operator*() const&& { return std::move(value()); } |
517 | | - constexpr Value&& operator*() && { return std::move(value()); } |
| 515 | + constexpr const Value& operator*() const& [[FOLLY_ATTR_CLANG_LIFETIMEBOUND]] { |
| 516 | + return value(); |
| 517 | + } |
| 518 | + constexpr Value& operator*() & [[FOLLY_ATTR_CLANG_LIFETIMEBOUND]] { |
| 519 | + return value(); |
| 520 | + } |
| 521 | + constexpr const Value&& operator*() |
| 522 | + const&& [[FOLLY_ATTR_CLANG_LIFETIMEBOUND]] { |
| 523 | + return std::move(value()); |
| 524 | + } |
| 525 | + constexpr Value&& operator*() && [[FOLLY_ATTR_CLANG_LIFETIMEBOUND]] { |
| 526 | + return std::move(value()); |
| 527 | + } |
518 | 528 |
|
519 | 529 | /// Get the value. Must have value. |
520 | 530 | /// @methodset Getters |
521 | | - constexpr const Value* operator->() const { return &value(); } |
522 | | - constexpr Value* operator->() { return &value(); } |
| 531 | + constexpr const Value* operator->() const [[FOLLY_ATTR_CLANG_LIFETIMEBOUND]] { |
| 532 | + return &value(); |
| 533 | + } |
| 534 | + constexpr Value* operator->() [[FOLLY_ATTR_CLANG_LIFETIMEBOUND]] { |
| 535 | + return &value(); |
| 536 | + } |
523 | 537 |
|
524 | 538 | /// Return a copy of the value if set, or a given default if not. |
525 | 539 | /// @methodset Getters |
|
0 commit comments