diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index 73cea0009babbd93a68945ae4eb3512323a73280..eb1b7f7463767460513fcefb6d3f66ef980e57fb 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -1392,8 +1392,21 @@ bool Parser::parseDeclarator(DeclaratorAST *&node, SpecifierListAST *decl_specif
             // ### parse ref-qualifiers
             parseExceptionSpecification(ast->exception_specification);
 
-            if (_cxx0xEnabled && ! node->ptr_operator_list && LA() == T_ARROW)
-                parseTrailingReturnType(ast->trailing_return_type);
+            if (_cxx0xEnabled && ! node->ptr_operator_list && LA() == T_ARROW) {
+                // only allow if there is 1 type spec, which has to be 'auto'
+                bool hasAuto = false;
+                for (SpecifierListAST *iter = decl_specifier_list; !hasAuto && iter; iter = iter->next) {
+                    SpecifierAST *spec = iter->value;
+                    if (SimpleSpecifierAST *simpleSpec = spec->asSimpleSpecifier()) {
+                        if (_translationUnit->tokenKind(simpleSpec->specifier_token) == T_AUTO) {
+                            hasAuto = true;
+                        }
+                    }
+                }
+
+                if (hasAuto)
+                    parseTrailingReturnType(ast->trailing_return_type);
+            }
 
             *postfix_ptr = new (_pool) PostfixDeclaratorListAST(ast);
             postfix_ptr = &(*postfix_ptr)->next;
diff --git a/src/tools/gen-cpp-ast/generate-ast b/src/tools/gen-cpp-ast/generate-ast
deleted file mode 100755
index 1e5e8f458d4e39193b7b796d5d86bfec89a52e15..0000000000000000000000000000000000000000
Binary files a/src/tools/gen-cpp-ast/generate-ast and /dev/null differ