From 8662470aba117c491f67e84adfc5f9d4dda107b5 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 20 Oct 2022 16:01:06 +0200 Subject: [PATCH] CPlusPlus: Allow " = default" also on function implementations Note that we only make sure not to trip over valid code; we make no effort to check whether default/delete is actually allowed at this type of declaration. Fixes: QTCREATORBUG-28102 Change-Id: Ic693319b9dfaf8652cf4cae9cd907a6e258ad773 Reviewed-by: Reviewed-by: Christian Stenger --- src/libs/3rdparty/cplusplus/Parser.cpp | 2 +- .../auto/cplusplus/cxx11/data/defaultdeleteInitializer.1.cpp | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/libs/3rdparty/cplusplus/Parser.cpp b/src/libs/3rdparty/cplusplus/Parser.cpp index d5aa3e4e29d..430b19efbe4 100644 --- a/src/libs/3rdparty/cplusplus/Parser.cpp +++ b/src/libs/3rdparty/cplusplus/Parser.cpp @@ -2798,7 +2798,7 @@ bool Parser::parseInitDeclarator(DeclaratorAST *&node, SpecifierListAST *decl_sp return true; } rewind(colon_token); - } else if (isFunctionDeclarator && declaringClass && node->core_declarator && LA() == T_EQUAL && LA(3) == T_SEMICOLON) { // = 0, = delete, = default + } else if (isFunctionDeclarator && node->core_declarator && LA() == T_EQUAL && LA(3) == T_SEMICOLON) { // = 0, = delete, = default if (!_languageFeatures.cxx11Enabled || LA(2) == T_NUMERIC_LITERAL) { parseInitializer(node->initializer, &node->equal_token); } else { diff --git a/tests/auto/cplusplus/cxx11/data/defaultdeleteInitializer.1.cpp b/tests/auto/cplusplus/cxx11/data/defaultdeleteInitializer.1.cpp index 7ec9e9b91ec..8db6ea2b1d5 100644 --- a/tests/auto/cplusplus/cxx11/data/defaultdeleteInitializer.1.cpp +++ b/tests/auto/cplusplus/cxx11/data/defaultdeleteInitializer.1.cpp @@ -1,8 +1,10 @@ class C { - C() = default; + C(); C(const C &) = delete; C &operator=(const C &) = default; void foo() = delete; template void bar(T) = delete; }; + +C::C() = default;