Index: src/AST/Node.cpp
===================================================================
--- src/AST/Node.cpp	(revision 9ea38de4515063905b11e8dd973b76e59c7671a8)
+++ src/AST/Node.cpp	(revision bcb311b56e418dc23ef7ba29ed52067efc2c16ba)
@@ -30,5 +30,5 @@
 #include "Print.hpp"
 
-/// MEMORY DEBUG -- allows breaking on construction/destruction of dynamically chosen object.
+/// MEMORY DEBUG -- allows breaking on ref-count changes of dynamically chosen object.
 /// Process to use in GDB:
 ///   break ast::Node::_trap()
@@ -39,13 +39,19 @@
 void * MEM_TRAP_OBJ = nullptr;
 
-void ast::Node::_trap() {
-	if ( this == MEM_TRAP_OBJ ) std::raise(SIGTRAP);
-}
-
-template< typename node_t, enum ast::Node::ref_type ref_t >
-void ast::ptr_base<node_t, ref_t>::_inc( const node_t * node ) { node->increment(ref_t); }
-
-template< typename node_t, enum ast::Node::ref_type ref_t >
-void ast::ptr_base<node_t, ref_t>::_dec( const node_t * node ) { node->decrement(ref_t); }
+void _trap( const void * node ) {
+	if ( node == MEM_TRAP_OBJ ) std::raise(SIGTRAP);
+}
+
+template< typename node_t, enum ast::Node::ref_type ref_t >
+void ast::ptr_base<node_t, ref_t>::_inc( const node_t * node ) {
+	node->increment(ref_t);
+	_trap( node );
+}
+
+template< typename node_t, enum ast::Node::ref_type ref_t >
+void ast::ptr_base<node_t, ref_t>::_dec( const node_t * node ) {
+	_trap( node );
+	node->decrement(ref_t);
+}
 
 template< typename node_t, enum ast::Node::ref_type ref_t >
Index: src/AST/Node.hpp
===================================================================
--- src/AST/Node.hpp	(revision 9ea38de4515063905b11e8dd973b76e59c7671a8)
+++ src/AST/Node.hpp	(revision bcb311b56e418dc23ef7ba29ed52067efc2c16ba)
@@ -30,15 +30,13 @@
 /// Keeps both strong and weak reference counts.
 class Node {
-	/// call to debug on node creation/deletion
-	void _trap();
 public:
 	// override defaults to ensure assignment doesn't
 	// change/share reference counts
-	Node() { _trap(); }
-	Node(const Node&) : strong_count(0), weak_count(0) { _trap(); }
-	Node(Node&&) : strong_count(0), weak_count(0) { _trap(); }
+	Node() = default;
+	Node(const Node&) : strong_count(0), weak_count(0) {}
+	Node(Node&&) : strong_count(0), weak_count(0) {}
 	Node& operator= (const Node&) = delete;
 	Node& operator= (Node&&) = delete;
-	virtual ~Node() { _trap(); }
+	virtual ~Node() {}
 
 	virtual const Node * accept( Visitor & v ) const = 0;
