tidy - cppcoreguidelines-avoid-const-or-ref-data-members — Extra Clang Tools 22.0.0git documentation (original) (raw)

This check warns when structs or classes that are copyable or movable, and have const-qualified or reference (lvalue or rvalue) data members. Having such members is rarely useful, and makes the class only copy-constructible but not copy-assignable.

Examples:

// Bad, const-qualified member struct Const { const int x; }

// Good: class Foo { public: int get() const { return x; } private: int x; };

// Bad, lvalue reference member struct Ref { int& x; };

// Good: struct Foo { int* x; std::unique_ptr x; std::shared_ptr x; gsl::not_null<int*> x; };

// Bad, rvalue reference member struct RefRef { int&& x; };

This check implements C.12from the C++ Core Guidelines.

Further reading:Data members: Never const.