Index: src/SymTab/Demangle.cc
===================================================================
--- src/SymTab/Demangle.cc	(revision 8d25360e4dfa05035c94eaafd0980fce401b0be7)
+++ src/SymTab/Demangle.cc	(revision 80eefcbc5f9cf0e96b03174100a2ac5bb28ee6ac)
@@ -543,5 +543,5 @@
 				if (done()) return nullptr;
 
-				std::list<TypeDecl *> forall;
+				Type::ForallList forall;
 				if (isPrefix(Encoding::forall)) {
 					PRINT( std::cerr << "polymorphic with..." << std::endl; )
Index: src/SymTab/Indexer.cc
===================================================================
--- src/SymTab/Indexer.cc	(revision 8d25360e4dfa05035c94eaafd0980fce401b0be7)
+++ src/SymTab/Indexer.cc	(revision 80eefcbc5f9cf0e96b03174100a2ac5bb28ee6ac)
@@ -674,5 +674,5 @@
 	}
 
-	void Indexer::addTypes( const std::list< TypeDecl * > & tds ) {
+	void Indexer::addTypes( const Type::ForallList & tds ) {
 		for ( auto td : tds ) {
 			addType( td );
Index: src/SymTab/Indexer.h
===================================================================
--- src/SymTab/Indexer.h	(revision 8d25360e4dfa05035c94eaafd0980fce401b0be7)
+++ src/SymTab/Indexer.h	(revision 80eefcbc5f9cf0e96b03174100a2ac5bb28ee6ac)
@@ -21,6 +21,7 @@
 #include <functional>         // for function
 
+#include "SynTree/Type.h"  // for AST nodes
+#include "SynTree/SynTree.h"  // for AST nodes
 #include "SynTree/Visitor.h"  // for Visitor
-#include "SynTree/SynTree.h"  // for AST nodes
 
 namespace ResolvExpr {
@@ -119,5 +120,5 @@
 
 		/// convenience function for adding a list of forall parameters to the indexer
-		void addTypes( const std::list< TypeDecl * > & tds );
+		void addTypes( const Type::ForallList & tds );
 
 		/// convenience function for adding all of the declarations in a function type to the indexer
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision 8d25360e4dfa05035c94eaafd0980fce401b0be7)
+++ src/SymTab/Validate.cc	(revision 80eefcbc5f9cf0e96b03174100a2ac5bb28ee6ac)
@@ -808,8 +808,9 @@
 
 	/// Fix up assertions - flattens assertion lists, removing all trait instances
-	void forallFixer( std::list< TypeDecl * > & forall, BaseSyntaxNode * node ) {
+	template<typename container_t>
+	void forallFixer( container_t & forall, BaseSyntaxNode * node ) {
 		for ( TypeDecl * type : forall ) {
-			std::list< DeclarationWithType * > asserts;
-			asserts.splice( asserts.end(), type->assertions );
+			decltype(type->assertions) asserts;
+			std::swap(asserts, type->assertions );
 			// expand trait instances into their members
 			for ( DeclarationWithType * assertion : asserts ) {
