make move-ctor and destructor noexcept for folly::Optional
authorAvani Nandini <avani@fb.com>
Tue, 29 Oct 2013 07:11:49 +0000 (00:11 -0700)
committerSara Golemon <sgolemon@fb.com>
Wed, 6 Nov 2013 01:35:18 +0000 (17:35 -0800)
Summary:
as per summary
@override-unit-failures

Test Plan: run unit tests

Reviewed By: delong.j@fb.com

FB internal diff: D1031726

folly/Optional.h

index 4295e271532f5466ab7cc1c992a073823fa38b2a..f0d21c982b3c7dbad2244062d302b05c1048c45c 100644 (file)
@@ -91,7 +91,9 @@ class Optional {
     : hasValue_(false) {
   }
 
-  Optional(const Optional& src) {
+  Optional(const Optional& src)
+    noexcept(std::is_nothrow_copy_constructible<Value>::value) {
+
     if (src.hasValue()) {
       construct(src.value());
     } else {
@@ -99,7 +101,9 @@ class Optional {
     }
   }
 
-  Optional(Optional&& src) {
+  Optional(Optional&& src)
+    noexcept(std::is_nothrow_move_constructible<Value>::value) {
+
     if (src.hasValue()) {
       construct(std::move(src.value()));
       src.clear();
@@ -120,7 +124,7 @@ class Optional {
     construct(newValue);
   }
 
-  ~Optional() {
+  ~Optional() noexcept {
     clear();
   }
 
@@ -167,12 +171,16 @@ class Optional {
     return *this;
   }
 
-  Optional& operator=(Optional &&other) {
+  Optional& operator=(Optional &&other)
+    noexcept (std::is_nothrow_move_assignable<Value>::value) {
+
     assign(std::move(other));
     return *this;
   }
 
-  Optional& operator=(const Optional &other) {
+  Optional& operator=(const Optional &other)
+    noexcept (std::is_nothrow_copy_assignable<Value>::value) {
+
     assign(other);
     return *this;
   }