Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 70a06f62e367e9c06390ae334378318747bac089)
+++ src/CodeGen/CodeGenerator.cc	(revision 356189ae6aa5eeb5c37aa8f28f8cff067fb2f919)
@@ -10,5 +10,5 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Rob Schluntz
-// Last Modified On : Thu Apr 14 15:40:00 2016
+// Last Modified On : Thu Apr 14 17:10:21 2016
 // Update Count     : 255
 //
@@ -238,10 +238,12 @@
 				  case OT_POSTFIXASSIGN:
 				  case OT_INFIXASSIGN:
+				  case OT_CTOR:
 					{
 						assert( arg != applicationExpr->get_args().end() );
 						if ( AddressExpr *addrExpr = dynamic_cast< AddressExpr * >( *arg ) ) {
-
+							// remove & from first assignment/ctor argument
 							*arg = addrExpr->get_arg();
 						} else {
+							// no address-of operator, so must be a pointer - add dereference
 							UntypedExpr *newExpr = new UntypedExpr( new NameExpr( "*?" ) );
 							newExpr->get_args().push_back( *arg );
@@ -266,19 +268,27 @@
 
 				  case OT_CALL:
-					// there are no intrinsic definitions of the function call operator or constructors or destructors
+					// there are no intrinsic definitions of the function call operator
 					assert( false );
 					break;
 
 				  case OT_CTOR:
-				  // it's just an optimization to disallow this, so for now let it through
-				  // since it makes autogenerating constructors a lot easier
-  				varExpr->accept( *this );
-					output << "(";
-					genCommaList( applicationExpr->get_args().begin(), applicationExpr->get_args().end() );
-					output << ")";
-
-				  // intrinsic constructors should never be called directly - they should be transformed back into Initializer nodes
-				  // assert(false);
-				  break;
+					if ( applicationExpr->get_args().size() == 1 ) {
+						// the expression fed into a single parameter constructor may contain
+						// side effects - output as a void expression
+						output << "((void)(";
+						(*arg++)->accept( *this );
+						output << ")) /* ?{} */";
+					} else if ( applicationExpr->get_args().size() == 2 ) {
+						// intrinsic constructors are essentially bitwise assignment
+						output << "(";
+						(*arg++)->accept( *this );
+						output << opInfo.symbol;
+						(*arg)->accept( *this );
+						output << ") /* ?{} */";
+					} else {
+						// not constructors with 0 or more than 2 parameters
+						assert( false );
+					}
+					break;
 
 				  case OT_DTOR:
Index: src/CodeGen/OperatorTable.cc
===================================================================
--- src/CodeGen/OperatorTable.cc	(revision 70a06f62e367e9c06390ae334378318747bac089)
+++ src/CodeGen/OperatorTable.cc	(revision 356189ae6aa5eeb5c37aa8f28f8cff067fb2f919)
@@ -10,5 +10,5 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Rob Schluntz
-// Last Modified On : Tue Oct 06 15:26:34 2015
+// Last Modified On : Thu Apr 14 16:48:27 2016
 // Update Count     : 9
 //
@@ -21,5 +21,5 @@
 		const OperatorInfo tableValues[] = {
 			{	"?[?]",		"",		"_operator_index",				OT_INDEX			},
-			{	"?{}",		"",		"_constructor",					OT_CTOR				},
+			{	"?{}",		"=",		"_constructor",					OT_CTOR				},
 			{	"^?{}",		"",		"_destructor",					OT_DTOR				},
 			{	"?()",		"",		"_operator_call",				OT_CALL				},
