From 3c635ef1d44e003c789cd5869f9dc2833d17b567 Mon Sep 17 00:00:00 2001
From: Erik Verbruggen <erik.verbruggen@nokia.com>
Date: Thu, 23 Feb 2012 15:21:19 +0100
Subject: [PATCH] [C++] Correctly parse inline constructors for templates.

This failed for:
    template<class T> inline S<T>::S(nullptr_t):_p(0){}

Change-Id: Ibb48f403a66cb19567e65270aa166849ee81a162
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
---
 src/libs/3rdparty/cplusplus/Parser.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/libs/3rdparty/cplusplus/Parser.cpp b/src/libs/3rdparty/cplusplus/Parser.cpp
index 39578a7bec5..f9d2802fc25 100644
--- a/src/libs/3rdparty/cplusplus/Parser.cpp
+++ b/src/libs/3rdparty/cplusplus/Parser.cpp
@@ -3727,7 +3727,8 @@ bool Parser::parseSimpleDeclaration(DeclarationAST *&node, ClassSpecifierAST *de
 
     if (LA() != T_SEMICOLON) {
         const bool maybeCtor = (LA() == T_LPAREN && named_type_specifier);
-        if (! parseInitDeclarator(declarator, decl_specifier_seq, declaringClass) && maybeCtor) {
+        bool didParseInitDeclarator = parseInitDeclarator(declarator, decl_specifier_seq, declaringClass);
+        if ((! didParseInitDeclarator && maybeCtor) || (didParseInitDeclarator && maybeCtor && LA() == T_COLON)){
             rewind(startOfNamedTypeSpecifier);
             named_type_specifier = 0;
             // pop the named type specifier from the decl-specifier-seq
-- 
GitLab