Index: src/AST/Convert.cpp
===================================================================
--- src/AST/Convert.cpp	(revision b869ec5003199dfa8bcbc3e90cae94d2d8ad1127)
+++ src/AST/Convert.cpp	(revision 746ae825da938dc811b235870e4be561b6aa1fb8)
@@ -755,6 +755,6 @@
 			get<Type>().accept1( node->base ),
 			get<Expression>().accept1( node->dimension ),
-			node->isVarLen,
-			node->isStatic
+			(bool)node->isVarLen,
+			(bool)node->isStatic
 		};
 		return nullptr;
@@ -766,6 +766,6 @@
 			get<Type>().accept1( node->base ),
 			get<Expression>().accept1( node->dimension ),
-			node->isVarLen,
-			node->isStatic
+			(bool)node->isVarLen,
+			(bool)node->isStatic
 		};
 		return nullptr;
@@ -790,5 +790,8 @@
 
 	const ast::Type * visit( const ast::FunctionType * node ) override final {
-		auto ty = new FunctionType { cv( node ), node->isVarArgs };
+		auto ty = new FunctionType {
+			cv( node ), 
+			(bool)node->isVarArgs
+		};
 		ty->returnVals = get<DeclarationWithType>().acceptL( node->returns );
 		ty->parameters = get<DeclarationWithType>().acceptL( node->params );
@@ -907,30 +910,38 @@
 
 	const ast::Type * visit( const ast::TupleType * node ) override final {
-		(void)node;
+		this->node = new TupleType{
+			cv( node ),
+			get<Type>().acceptL( node->types )
+			// members generated by TupleType c'tor
+		};
 		return nullptr;
 	}
 
 	const ast::Type * visit( const ast::TypeofType * node ) override final {
-		(void)node;
+		this->node = new TypeofType{
+			cv( node ),
+			get<Expression>().accept1( node->expr ),
+			(bool)node->kind
+		};
 		return nullptr;
 	}
 
 	const ast::Type * visit( const ast::VarArgsType * node ) override final {
-		(void)node;
+		this->node = new VarArgsType{ cv( node ) };
 		return nullptr;
 	}
 
 	const ast::Type * visit( const ast::ZeroType * node ) override final {
-		(void)node;
+		this->node = new ZeroType{ cv( node ) };
 		return nullptr;
 	}
 
 	const ast::Type * visit( const ast::OneType * node ) override final {
-		(void)node;
-		return nullptr;
-	}
-
-	const ast::Type * visit( const ast::GlobalScopeType * node ) override final {
-		(void)node;
+		this->node = new OneType{ cv( node ) };
+		return nullptr;
+	}
+
+	const ast::Type * visit( const ast::GlobalScopeType * ) override final {
+		this->node = new GlobalScopeType{};
 		return nullptr;
 	}
@@ -1831,30 +1842,38 @@
 	}
 
-	virtual void visit( TupleType * ) override final {
-
-	}
-
-	virtual void visit( TypeofType * ) override final {
-
+	virtual void visit( TupleType * old ) override final {
+		this->node = new ast::TupleType{
+			GET_ACCEPT_V( types, Type ),
+			// members generated by TupleType c'tor
+			cv( old )
+		};
+	}
+
+	virtual void visit( TypeofType * old ) override final {
+		this->node = new ast::TypeofType{
+			GET_ACCEPT_1( expr, Expr ),
+			(ast::TypeofType::Kind)old->is_basetypeof,
+			cv( old )
+		};
 	}
 
 	virtual void visit( AttrType * ) override final {
-
-	}
-
-	virtual void visit( VarArgsType * ) override final {
-
-	}
-
-	virtual void visit( ZeroType * ) override final {
-
-	}
-
-	virtual void visit( OneType * ) override final {
-
+		assertf( false, "AttrType deprecated in new AST." );
+	}
+
+	virtual void visit( VarArgsType * old ) override final {
+		this->node = new ast::VarArgsType{ cv( old ) };
+	}
+
+	virtual void visit( ZeroType * old ) override final {
+		this->node = new ast::ZeroType{ cv( old ) };
+	}
+
+	virtual void visit( OneType * old ) override final {
+		this->node = new ast::OneType{ cv( old ) };
 	}
 
 	virtual void visit( GlobalScopeType * ) override final {
-
+		this->node = new ast::GlobalScopeType{};
 	}
 
Index: src/AST/Type.hpp
===================================================================
--- src/AST/Type.hpp	(revision b869ec5003199dfa8bcbc3e90cae94d2d8ad1127)
+++ src/AST/Type.hpp	(revision 746ae825da938dc811b235870e4be561b6aa1fb8)
@@ -514,5 +514,5 @@
 class GlobalScopeType final : public Type {
 public:
-	GlobalScopeType( CV::Qualifiers q = {} ) : Type( q ) {}
+	GlobalScopeType() : Type() {}
 
 	const Type * accept( Visitor & v ) const override { return v.visit( this ); }
