Index: src/CodeGen/OperatorTable.cc
===================================================================
--- src/CodeGen/OperatorTable.cc	(revision e6cee92975ba3e912a537934e3a775bcddc7a9fa)
+++ src/CodeGen/OperatorTable.cc	(revision bff227f73387fd7ed67a8a31545259b27d4ddc24)
@@ -14,6 +14,7 @@
 //
 
-#include <map>      // for map, _Rb_tree_const_iterator, map<>::const_iterator
-#include <utility>  // for pair
+#include <algorithm>  // for any_of
+#include <map>        // for map, _Rb_tree_const_iterator, map<>::const_iterator
+#include <utility>    // for pair
 
 #include "OperatorTable.h"
@@ -91,4 +92,39 @@
 		} // if
 	}
+
+	/// determines if a given function name is one of the operator types between [begin, end)
+	template<typename Iterator>
+	bool isOperatorType( const std::string & funcName, Iterator begin, Iterator end ) {
+		OperatorInfo info;
+		if ( operatorLookup( funcName, info ) ) {
+			return std::find( begin, end, info.type ) != end;
+		}
+		return false;
+	}
+
+	bool isConstructor( const std::string & funcName ) {
+		static OperatorType types[] = { OT_CTOR };
+		return isOperatorType( funcName, std::begin(types), std::end(types) );
+	}
+
+	bool isDestructor( const std::string & funcName ) {
+		static OperatorType types[] = { OT_DTOR };
+		return isOperatorType( funcName, std::begin(types), std::end(types) );
+	}
+
+	bool isAssignment( const std::string & funcName ) {
+		static OperatorType types[] = { OT_PREFIXASSIGN, OT_POSTFIXASSIGN, OT_INFIXASSIGN };
+		return isOperatorType( funcName, std::begin(types), std::end(types) );
+	}
+
+	bool isCtorDtor( const std::string & funcName ) {
+		static OperatorType types[] = { OT_CTOR, OT_DTOR };
+		return isOperatorType( funcName, std::begin(types), std::end(types) );
+	}
+
+	bool isCtorDtorAssign( const std::string & funcName ) {
+		static OperatorType types[] = { OT_CTOR, OT_DTOR, OT_PREFIXASSIGN, OT_POSTFIXASSIGN, OT_INFIXASSIGN };
+		return isOperatorType( funcName, std::begin(types), std::end(types) );
+	}
 } // namespace CodeGen
 
Index: src/CodeGen/OperatorTable.h
===================================================================
--- src/CodeGen/OperatorTable.h	(revision e6cee92975ba3e912a537934e3a775bcddc7a9fa)
+++ src/CodeGen/OperatorTable.h	(revision bff227f73387fd7ed67a8a31545259b27d4ddc24)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// OperatorTable.h -- 
+// OperatorTable.h --
 //
 // Author           : Richard C. Bilson
@@ -43,4 +43,10 @@
 
 	bool operatorLookup( std::string funcName, OperatorInfo &info );
+
+	bool isConstructor( const std::string & );
+	bool isDestructor( const std::string & );
+	bool isAssignment( const std::string & );
+	bool isCtorDtor( const std::string & );
+	bool isCtorDtorAssign( const std::string & );
 } // namespace CodeGen
 
