[cfe-dev] Why does clang-tidy recommend deleted member functions should be public?

James Dennett via cfe-dev cfe-dev at lists.llvm.org
Tue Oct 31 08:11:52 PDT 2017


On Mon, Oct 30, 2017 at 11:34 PM, Nicolas Lesser via cfe-dev <
cfe-dev at lists.llvm.org> wrote:

> There's nothing inherently wrong with deleting member functions that are
> private, but if they are public, you will get a better error message
> (namely that the function is deleted) instead of an error message that says
> that the functions are private.
>
> AFAIK, Qt supports C++11, but also previous versions. I don't know how
> they implemented Q_DISABLE_COPY, but it probably expands to copy
> constructor and copy assignment declarations before C++11, and if you
> enable C++11 mode, deletes them instead. In pre-C++11, the declarations
> would have to be private, so you get an error at compile time and not at
> link time.
>
> If you're only compiling with C++11, it should be safe to put the macro in
> public. Alternately, you can always delete the copy constructor and
> assignment yourself.
>

Another reason to prefer making these "public" is non-technical: they
affect fundamental aspects of the client interface of a class, and hiding
them in "private" as if they were implementation details is unhelpful.
Unfortunately necessary in C++98, but no longer needed with C++11.

-- James
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20171031/850629f5/attachment.html>


More information about the cfe-dev mailing list