瀏覽代碼

Increased explicitness of variant, added inlines

Samuel Jaffe 9 年之前
父節點
當前提交
e48a80b6e2

+ 37 - 37
variant.cpp

@@ -10,45 +10,45 @@
 #include <iostream>
 
 struct test{
-    int * holder;
-    test() {
-        std::cout << "test()" << std::endl;
-        holder = new int();
-    }
-    
-    test(test&& old) : holder(nullptr) {
-        std::cout << "test(test&&)" << std::endl;
-        std::swap(holder,old.holder);
-    }
-    test(const test& old) {
-        std::cout << "test(const test&)" << std::endl;
-        holder = new int(*old.holder);
-    }
-    ~test()
-    {
-        std::cout << "~test()" << std::endl;
-        delete holder;
-    }
+  int * holder;
+  test() {
+    std::cout << "test()" << std::endl;
+    holder = new int();
+  }
+  
+  test(test&& old) : holder(nullptr) {
+    std::cout << "test(test&&)" << std::endl;
+    std::swap(holder,old.holder);
+  }
+  test(const test& old) {
+    std::cout << "test(const test&)" << std::endl;
+    holder = new int(*old.holder);
+  }
+  ~test()
+  {
+    std::cout << "~test()" << std::endl;
+    delete holder;
+  }
 };
 
 
 int main() {
-    using my_var = variant<std::string, test>;
-    
-    my_var d;
-    
-    d.set<std::string>("First string");
-    std::cout << d.get<std::string>() << std::endl;
-    
-    d.set<test>();
-    *d.get<test>().holder = 42;
-    
-    my_var e(std::move(d));
-    std::cout << *e.get<test>().holder << std::endl;
-    
-    *e.get<test>().holder = 43;
-    
-    d = e;
-    
-    std::cout << *d.get<test>().holder << std::endl;    
+  using my_var = variant<std::string, test>;
+  
+  my_var d{};
+  
+  d.set<std::string>("First string");
+  std::cout << d.get<std::string>() << std::endl;
+  
+  d.set<test>();
+  *d.get<test>().holder = 42;
+  
+  my_var e(std::move(d));
+  std::cout << *e.get<test>().holder << std::endl;
+  
+  *e.get<test>().holder = 43;
+  
+  d = e;
+  
+  std::cout << *d.get<test>().holder << std::endl;
 }

+ 5 - 5
variant.hpp

@@ -95,14 +95,14 @@ private:
   size_t type_id;
   data_t data;
 public:
-  variant() : type_id(invalid_type()) {   }
+  variant() : type_id(invalid_type()), data() {   }
   
-  variant(const variant<Ts...>& old) : type_id(old.type_id)
+  variant(const variant<Ts...>& old) : type_id(old.type_id), data()
   {
     helper_t::copy(old.type_id, &old.data, &data);
   }
   
-  variant(variant<Ts...>&& old) : type_id(old.type_id)
+  variant(variant<Ts...>&& old) : type_id(old.type_id), data()
   {
     helper_t::move(old.type_id, &old.data, &data);
   }
@@ -117,11 +117,11 @@ public:
   }
   
   template<typename T>
-  bool is() const {
+  inline bool is() const {
     return (type_id == type_index<T, Ts...>::value);
   }
   
-  bool valid() const {
+  inline bool valid() const {
     return (type_id != invalid_type());
   }
   

+ 5 - 0
variant.xcodeproj/project.pbxproj

@@ -207,6 +207,8 @@
 				GCC_ENABLE_CPP_EXCEPTIONS = YES;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_SYMBOLS_PRIVATE_EXTERN = YES;
+				GCC_TREAT_WARNINGS_AS_ERRORS = YES;
+				GCC_WARN_PEDANTIC = YES;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 			};
 			name = Debug;
@@ -220,6 +222,8 @@
 				GCC_ENABLE_CPP_EXCEPTIONS = YES;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_SYMBOLS_PRIVATE_EXTERN = YES;
+				GCC_TREAT_WARNINGS_AS_ERRORS = YES;
+				GCC_WARN_PEDANTIC = YES;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 			};
 			name = Release;
@@ -243,6 +247,7 @@
 				CDB2F7231C5D42EB0067C2EC /* Release */,
 			);
 			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
 		};
 /* End XCConfigurationList section */
 	};

+ 1 - 1
variant.xcodeproj/xcuserdata/samjaffe.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -7,7 +7,7 @@
 		<key>variant.xcscheme</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>13</integer>
+			<integer>11</integer>
 		</dict>
 	</dict>
 	<key>SuppressBuildableAutocreation</key>