Index: src/Tuples/TupleExpansion.cc
===================================================================
--- src/Tuples/TupleExpansion.cc	(revision 02fdb8eb4c22b14a7fc7116a96f53d73dae71205)
+++ src/Tuples/TupleExpansion.cc	(revision 9b4f3290a76fc499cac978b84cc1ab000bd8d6d0)
@@ -17,5 +17,10 @@
 #include <cassert>                // for assert
 #include <list>                   // for list
-
+#include <vector>
+
+#include "AST/CVQualifiers.hpp"
+#include "AST/Expr.hpp"
+#include "AST/Node.hpp"
+#include "AST/Type.hpp"
 #include "Common/PassVisitor.h"   // for PassVisitor, WithDeclsToAdd, WithGu...
 #include "Common/ScopedMap.h"     // for ScopedMap
@@ -314,4 +319,26 @@
 		return new TupleType( qualifiers, types );
 	}
+	const ast::Type * makeTupleType( const std::vector<ast::ptr<ast::Expr>> & exprs ) {
+		assert(!"implemented; needs Type.cpp in build");
+		// // produce the TupleType which aggregates the types of the exprs
+		// std::vector<ast::ptr<ast::Type>> types;
+		// ast::CV::Qualifiers quals{ 
+		// 	ast::CV::Const | ast::CV::Volatile | ast::CV::Restrict | ast::CV::Lvalue | 
+		// 	ast::CV::Atomic | ast::CV::Mutex };
+		
+		// for ( const ast::Expr * expr : exprs ) {
+		// 	assert( expr->result );
+		// 	// if the type of any expr is void, the type of the entire tuple is void
+		// 	if ( expr->result->isVoid() ) return new ast::VoidType{};
+
+		// 	// qualifiers on the tuple type are the qualifiers that exist on all components
+		// 	quals &= expr->result->qualifiers;
+
+		// 	types.emplace_back( expr->result );
+		// }
+
+		// if ( exprs.empty() ) { quals = ast::CV::Qualifiers{}; }
+		// return new ast::TupleType{ std::move(types), quals };
+	}
 
 	TypeInstType * isTtype( Type * type ) {
Index: src/Tuples/Tuples.h
===================================================================
--- src/Tuples/Tuples.h	(revision 02fdb8eb4c22b14a7fc7116a96f53d73dae71205)
+++ src/Tuples/Tuples.h	(revision 9b4f3290a76fc499cac978b84cc1ab000bd8d6d0)
@@ -19,4 +19,6 @@
 #include <vector>
 
+#include "AST/Fwd.hpp"
+#include "AST/Node.hpp"
 #include "SynTree/Expression.h"
 #include "SynTree/Declaration.h"
@@ -42,4 +44,5 @@
 	/// returns VoidType if any of the expressions have Voidtype, otherwise TupleType of the Expression result types
 	Type * makeTupleType( const std::list< Expression * > & exprs );
+	const ast::Type * makeTupleType( const std::vector<ast::ptr<ast::Expr>> & exprs );
 
 	/// returns a TypeInstType if `type` is a ttype, nullptr otherwise
