Selaa lähdekoodia

:bug: fixed issues with tagged union

Felix Bytow 2 vuotta sitten
vanhempi
sitoutus
49bcda0885
2 muutettua tiedostoa jossa 15 lisäystä ja 10 poistoa
  1. 4 0
      .gitignore
  2. 11 10
      projects/forth-kata/src/Token.cpp

+ 4 - 0
.gitignore

@@ -7,3 +7,7 @@
 
 # cmake build
 *build*/
+
+# Visual Studio
+.vs/
+out/

+ 11 - 10
projects/forth-kata/src/Token.cpp

@@ -61,12 +61,12 @@ Token::Token(token::Number value) noexcept: type{Type::Number}
 
 Token::Token(token::Keyword value) noexcept: type{Type::Keyword}
 {
-    keyword = std::move(value);
+    new (&keyword) token::Keyword{std::move(value)};
 }
 
 Token::Token(token::Word value) noexcept: type{Type::Word}
 {
-    word = std::move(value);
+    new (&word) token::Word{std::move(value)};
 }
 
 Token::Token(Token const &src): type{src.type}
@@ -77,10 +77,10 @@ Token::Token(Token const &src): type{src.type}
             number = src.number;
             break;
         case Type::Keyword:
-            keyword = src.keyword;
+            new (&keyword) token::Keyword{src.keyword};
             break;
         case Type::Word:
-            word = src.word;
+            new (&word) token::Word{src.word};
     }
 }
 
@@ -93,12 +93,13 @@ Token::Token(Token &&src) noexcept: type{src.type}
             number = src.number;
             break;
         case Type::Keyword:
-            keyword = std::move(src.keyword);
+            new (&keyword) token::Keyword{std::move(src.keyword)};
             break;
         case Type::Word:
-            word = std::move(src.word);
+            new (&word) token::Word{std::move(src.word)};
     }
 }
+
 void Token::destroy() noexcept
 {
     switch (type)
@@ -126,10 +127,10 @@ Token &Token::operator=(Token const &src)
                 number = src.number;
                 break;
             case Type::Keyword:
-                keyword = src.keyword;
+                new (&keyword) token::Keyword{src.keyword};
                 break;
             case Type::Word:
-                word = src.word;
+                new (&word) token::Word{src.word};
         }
     }
     return *this;
@@ -147,10 +148,10 @@ Token &Token::operator=(Token &&src) noexcept
                 number = src.number;
                 break;
             case Type::Keyword:
-                keyword = std::move(src.keyword);
+                new (&keyword) token::Keyword{std::move(src.keyword)};
                 break;
             case Type::Word:
-                word = std::move(src.word);
+                new (&word) token::Word{std::move(src.word)};
         }
     }
     return *this;