|  | @@ -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;
 |