Index: src/AST/Decl.cpp
===================================================================
--- src/AST/Decl.cpp	(revision e0016a502a6906a272ff601bf65e13c188c6148a)
+++ src/AST/Decl.cpp	(revision 733074ece05cad188b108f756c6910a7d285c985)
@@ -81,5 +81,5 @@
 				auto result = eval( init->value );
 				if ( ! result.second ) {
-					SemanticError( init->location, toString( "Non-constexpr in initialization of "
+					SemanticError( init->location, ::toString( "Non-constexpr in initialization of "
 						"enumerator: ", field ) );
 				}
@@ -87,5 +87,5 @@
 			}
 			if ( enumValues.count( field->name ) != 0 ) {
-				SemanticError( location, toString( "Enum ", name, " has multiple members with the " 	"name ", field->name ) );
+				SemanticError( location, ::toString( "Enum ", name, " has multiple members with the " 	"name ", field->name ) );
 			}
 			enumValues[ field->name ] = crntVal;
Index: src/AST/Expr.cpp
===================================================================
--- src/AST/Expr.cpp	(revision e0016a502a6906a272ff601bf65e13c188c6148a)
+++ src/AST/Expr.cpp	(revision 733074ece05cad188b108f756c6910a7d285c985)
@@ -22,4 +22,5 @@
 #include "Stmt.hpp"
 #include "Type.hpp"
+#include "Common/utility.h"
 #include "Common/SemanticError.h"
 #include "GenPoly/Lvalue.h"        // for referencesPermissable
Index: src/AST/Fwd.hpp
===================================================================
--- src/AST/Fwd.hpp	(revision e0016a502a6906a272ff601bf65e13c188c6148a)
+++ src/AST/Fwd.hpp	(revision 733074ece05cad188b108f756c6910a7d285c985)
@@ -15,6 +15,4 @@
 
 #pragma once
-
-#include <string>
 
 #include "AST/Node.hpp"
@@ -133,12 +131,4 @@
 class TypeSubstitution;
 
-std::string toString( const Node * );
-
-template < typename ... Params >
-std::string toString( const Params & ... params ) {
-	#warning not implemented
-	return "";
-}
-
 typedef unsigned int UniqueId;
 
Index: src/AST/Node.cpp
===================================================================
--- src/AST/Node.cpp	(revision e0016a502a6906a272ff601bf65e13c188c6148a)
+++ src/AST/Node.cpp	(revision 733074ece05cad188b108f756c6910a7d285c985)
@@ -16,4 +16,6 @@
 #include "Node.hpp"
 #include "Fwd.hpp"
+
+#include <iostream>
 
 #include "Attribute.hpp"
@@ -42,4 +44,11 @@
 	assign( r );
 	return r;
+}
+
+std::ostream & ast::operator<< ( std::ostream & out, const ast::Node * node ) {
+	(void)node;
+	#warning unimplemented
+	assertf(false, "Unimplemented");
+	return out;
 }
 
Index: src/include/cassert
===================================================================
--- src/include/cassert	(revision e0016a502a6906a272ff601bf65e13c188c6148a)
+++ src/include/cassert	(revision 733074ece05cad188b108f756c6910a7d285c985)
@@ -19,4 +19,9 @@
 
 #include_next <cassert>
+
+#include <string>
+
+template < typename ... Params >
+std::string toString( const Params & ... params );
 
 #ifdef NDEBUG
