Index: src/GenPoly/BoxNew.cpp
===================================================================
--- src/GenPoly/BoxNew.cpp	(revision b8b5535c41dff04d3f36115454ca07d01c288d6c)
+++ src/GenPoly/BoxNew.cpp	(revision 3c4003b97c9ee9f1f9a353616422f55ea0456227)
@@ -16,4 +16,5 @@
 #include "Box.h"
 
+#include "AST/Chain.hpp"               // for chain_mutate
 #include "AST/Decl.hpp"                // for Decl, FunctionDecl, ...
 #include "AST/Expr.hpp"                // for AlignofExpr, ConstantExpr, ...
@@ -1435,7 +1436,4 @@
 	ast::FunctionType * type = new ast::FunctionType(
 		mutDecl->type->isVarArgs, mutDecl->type->qualifiers );
-	for ( auto type_param : mutDecl->type_params ) {
-		type->forall.emplace_back( new ast::TypeInstType( type_param ) );
-	}
 	for ( auto param : mutDecl->params ) {
 		type->params.emplace_back( param->get_type() );
@@ -2190,4 +2188,5 @@
 	ast::ObjectDecl const * previsit( ast::ObjectDecl const * decl );
 	ast::FunctionDecl const * previsit( ast::FunctionDecl const * decl );
+	ast::FunctionDecl const * postvisit( ast::FunctionDecl const * decl );
 	ast::TypedefDecl const * previsit( ast::TypedefDecl const * decl );
 	ast::StructDecl const * previsit( ast::StructDecl const * decl );
@@ -2210,4 +2209,12 @@
 }
 
+ast::FunctionDecl const * Eraser::postvisit( ast::FunctionDecl const * decl ) {
+	if ( decl->type_params.empty() ) return decl;
+	auto mutDecl = mutate( decl );
+	mutDecl->type_params.clear();
+	ast::chain_mutate( mutDecl->type )->forall.clear();
+	return mutDecl;
+}
+
 ast::TypedefDecl const * Eraser::previsit( ast::TypedefDecl const * decl ) {
 	guardTypeVarMap( decl->base );
