Index: src/SynTree/Type.cc
===================================================================
--- src/SynTree/Type.cc	(revision 056bee803aecbc2db1ac1b7607c78dcf1a8d13f7)
+++ src/SynTree/Type.cc	(revision 34b6a7b6878154693f83696df612a4adeee0fb87)
@@ -16,4 +16,5 @@
 
 #include "Attribute.h"                // for Attribute
+#include "Common/ToString.hpp"        // for toCString
 #include "Common/utility.h"           // for cloneAll, deleteAll, printAll
 #include "InitTweak/InitTweak.h"      // for getPointerBase
@@ -105,4 +106,8 @@
 int Type::referenceDepth() const { return 0; }
 
+AggregateDecl * Type::getAggr() const {
+	assertf( false, "Non-aggregate type: %s", toCString( this ) );
+}
+
 TypeSubstitution Type::genericSubstitution() const { assertf( false, "Non-aggregate type: %s", toCString( this ) ); }
 
Index: src/SynTree/Type.h
===================================================================
--- src/SynTree/Type.h	(revision 056bee803aecbc2db1ac1b7607c78dcf1a8d13f7)
+++ src/SynTree/Type.h	(revision 34b6a7b6878154693f83696df612a4adeee0fb87)
@@ -24,5 +24,4 @@
 #include "BaseSyntaxNode.h"  // for BaseSyntaxNode
 #include "Common/Iterate.hpp"// for operator+
-#include "Common/utility.h"  // for toCString
 #include "Mutator.h"         // for Mutator
 #include "SynTree.h"         // for AST nodes
@@ -186,5 +185,5 @@
 	virtual bool isComplete() const { return true; }
 
-	virtual AggregateDecl * getAggr() const { assertf( false, "Non-aggregate type: %s", toCString( this ) ); }
+	virtual AggregateDecl * getAggr() const;
 
 	virtual TypeSubstitution genericSubstitution() const;
