Index: src/AST/Copy.cpp
===================================================================
--- src/AST/Copy.cpp	(revision 3249dd8b090e8deb3ea0c7a3cc02a9fd797487de)
+++ src/AST/Copy.cpp	(revision ce36b5519dcfbed597a596a468dc1684221e78ab)
@@ -105,5 +105,6 @@
 }
 
-Node * deepCopyNode( const Node * localRoot ) {
+template<>
+Node * deepCopy<Node>( const Node * localRoot ) {
 	Pass< DeepCopyCore > dc;
 	Node const * newRoot = localRoot->accept( dc );
Index: src/AST/Copy.hpp
===================================================================
--- src/AST/Copy.hpp	(revision 3249dd8b090e8deb3ea0c7a3cc02a9fd797487de)
+++ src/AST/Copy.hpp	(revision ce36b5519dcfbed597a596a468dc1684221e78ab)
@@ -44,10 +44,11 @@
 }
 
-Node * deepCopyNode( const Node * node );
-
 template<typename node_t>
 node_t * deepCopy( const node_t * localRoot ) {
-	return strict_dynamic_cast<node_t *>( deepCopyNode( localRoot ) );
+	return strict_dynamic_cast<node_t *>( deepCopy<Node>( localRoot ) );
 }
+
+template<>
+Node * deepCopy<Node>( const Node * localRoot );
 
 }
Index: src/AST/Init.hpp
===================================================================
--- src/AST/Init.hpp	(revision 3249dd8b090e8deb3ea0c7a3cc02a9fd797487de)
+++ src/AST/Init.hpp	(revision ce36b5519dcfbed597a596a468dc1684221e78ab)
@@ -98,4 +98,5 @@
 	const_iterator begin() const { return initializers.begin(); }
 	const_iterator end() const { return initializers.end(); }
+	size_t size() const { return initializers.size(); }
 
 	const Init * accept( Visitor & v ) const override { return v.visit( this ); }
Index: src/AST/Pass.hpp
===================================================================
--- src/AST/Pass.hpp	(revision 3249dd8b090e8deb3ea0c7a3cc02a9fd797487de)
+++ src/AST/Pass.hpp	(revision ce36b5519dcfbed597a596a468dc1684221e78ab)
@@ -109,5 +109,5 @@
 	static auto read( node_type const * node, Args&&... args ) {
 		Pass<core_t> visitor( std::forward<Args>( args )... );
-		node_type const * temp = node->accept( visitor );
+		auto const * temp = node->accept( visitor );
 		assert( temp == node );
 		return visitor.get_result();
@@ -124,5 +124,5 @@
 	static auto read( node_type const * node ) {
 		Pass<core_t> visitor;
-		node_type const * temp = node->accept( visitor );
+		auto const * temp = node->accept( visitor );
 		assert( temp == node );
 		return visitor.get_result();
