Index: src/AST/Convert.cpp
===================================================================
--- src/AST/Convert.cpp	(revision 2377ca2ae5f29b9a9faf225df848aa347d834fb6)
+++ src/AST/Convert.cpp	(revision b230091f39bb4aefe0def3377d63fcd444340a3f)
@@ -2717,5 +2717,5 @@
 
 		for (auto & param : foralls) {
-			ty->forall.emplace_back(new ast::TypeInstType(param->name, param));
+			ty->forall.emplace_back(new ast::TypeInstType(param));
 			for (auto asst : param->assertions) {
 				ty->assertions.emplace_back(new ast::VariableExpr({}, asst));
Index: src/AST/Decl.cpp
===================================================================
--- src/AST/Decl.cpp	(revision 2377ca2ae5f29b9a9faf225df848aa347d834fb6)
+++ src/AST/Decl.cpp	(revision b230091f39bb4aefe0def3377d63fcd444340a3f)
@@ -68,5 +68,5 @@
 	}
 	for (auto & tp : this->type_params) {
-		ftype->forall.emplace_back(new TypeInstType(tp->name, tp));
+		ftype->forall.emplace_back(new TypeInstType(tp));
 		for (auto & ap: tp->assertions) {
 			ftype->assertions.emplace_back(new VariableExpr(loc, ap));
Index: src/AST/Type.cpp
===================================================================
--- src/AST/Type.cpp	(revision 2377ca2ae5f29b9a9faf225df848aa347d834fb6)
+++ src/AST/Type.cpp	(revision b230091f39bb4aefe0def3377d63fcd444340a3f)
@@ -147,4 +147,8 @@
 // --- TypeInstType
 
+TypeInstType::TypeInstType( const TypeDecl * b,
+	CV::Qualifiers q, std::vector<ptr<Attribute>> && as )
+: BaseInstType( b->name, q, move(as) ), base( b ), kind( b->kind ) {}
+
 void TypeInstType::set_base( const TypeDecl * b ) {
 	base = b;
Index: src/AST/Type.hpp
===================================================================
--- src/AST/Type.hpp	(revision 2377ca2ae5f29b9a9faf225df848aa347d834fb6)
+++ src/AST/Type.hpp	(revision b230091f39bb4aefe0def3377d63fcd444340a3f)
@@ -421,4 +421,8 @@
 		std::vector<ptr<Attribute>> && as = {} )
 	: BaseInstType( n, q, std::move(as) ), base( b ), kind( b->kind ) {}
+
+	TypeInstType( const TypeDecl * b,
+		CV::Qualifiers q = {}, std::vector<ptr<Attribute>> && as = {} );
+
 	TypeInstType( const std::string& n, TypeDecl::Kind k, CV::Qualifiers q = {},
 		std::vector<ptr<Attribute>> && as = {} )
