Skip to content

Fix #15197 FP uninitMemberVarNoCtor for class without constructor that has a member of a type without default constructor - #9013

Open
autoantwort wants to merge 1 commit into
cppcheck-opensource:mainfrom
autoantwort:fix-15197-uninitMemberVarNoCtor-nodefault
Open

autoantwort wants to merge 1 commit into
cppcheck-opensource:mainfrom
autoantwort:fix-15197-uninitMemberVarNoCtor-nodefault

Conversation

@autoantwort

Copy link
Copy Markdown
Contributor

Trac: https://trac.cppcheck.net/ticket/15197

Follow-up to #15080: a class without constructors that has a member whose type has no default constructor cannot be default-initialized. Every instance initializes all members, so uninitMemberVarNoCtor is a false positive:

struct N {
    explicit N(int);
};

struct S {
    N n;
    int i;          // FP: Member variable 'S::i' has no initializer. [uninitMemberVarNoCtor]
    bool b = true;
};

Cause: CheckClass::constructors() marks a class without constructors as not default-constructible only for reference members and const members of non-class type.

Fix: also mark it for a (non-pointer) member whose class type has constructors but none callable without arguments. A deleted default constructor doesn't count. A variadic constructor counts as default constructor if only the parameter pack or ellipsis is left.

Limitations (still reported as before):

  • library types without default constructor, e.g. std::reference_wrapper (std.cfg has no such information)
  • base classes without default constructor
  • members of aggregates that are themselves not default-constructible, and private default constructors
  • member types cppcheck does not resolve to a scope (e.g. decltype(...))

This PR was created by Claude Code (an AI coding agent) on behalf of @autoantwort.

🤖 Generated with Claude Code

…t has a member of a type without default constructor

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant