Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 6eb439832ecffd8a3243d08854bebef61ebda043)
+++ src/Parser/parser.yy	(revision 4845ae2748facdf39ec2df3aaba15448ed6cd16f)
@@ -393,4 +393,10 @@
 	| '(' compound_statement ')'						// GCC, lambda expression
 		{ $$ = new ExpressionNode( build_valexpr( $2 ) ); }
+	| primary_expression '{' argument_expression_list '}' // CFA
+		{
+			Token fn;
+			fn.str = new std::string( "?{}" );			// location undefined - use location of '{'?
+			$$ = new ExpressionNode( new ConstructorExpr( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $1 )->set_last( $3 ) ) ) );
+		}
 	;
 
@@ -425,9 +431,9 @@
 	| '(' type_name_no_function ')' '{' initializer_list comma_opt '}' // C99, compound-literal
 		{ $$ = new ExpressionNode( build_compoundLiteral( $2, new InitializerNode( $5, true ) ) ); }
-	| postfix_expression '{' argument_expression_list '}' // CFA
+	| '^' primary_expression '{' argument_expression_list '}' // CFA
 		{
 			Token fn;
-			fn.str = new std::string( "?{}" );			// location undefined - use location of '{'?
-			$$ = new ExpressionNode( new ConstructorExpr( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $1 )->set_last( $3 ) ) ) );
+			fn.str = new string( "^?{}" );				// location undefined
+			$$ = new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $2 )->set_last( $4 ) ) );
 		}
 	;
@@ -730,11 +736,4 @@
 	| exception_statement
 	| asm_statement
-	| '^' postfix_expression '{' argument_expression_list '}' ';' // CFA
-		{
-			Token fn;
-			fn.str = new string( "^?{}" );				// location undefined
-			$$ = new StatementNode( build_expr( new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $2 )->set_last( $4 ) ) ) ) );
-		}
-	;
 
 labeled_statement:
