https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85707
Bug ID: 85707 Summary: -Wclass-memaccess should excempt safe usage inside of a class and its friends Product: gcc Version: 8.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: redbeard0531 at gmail dot com Target Milestone: --- I get the point of the warning and would like to be able to turn it on. However we have some types that have been specifically designed to be memset and memcpy/memmove-able as long as certain rules are followed. This is an implementation detail of the type so non-friend users are expected to use the default/copy/move constructors, rather than directly manipulating the bytes. However classes (and their friends) are always allowed to violate their own invariants, even if external users aren't. That is why I think the warning should be suppressed* inside of contexts that have access to internals. *Ideally it would still trip if the class's members were not mem-accessible by it, but it seems more important (to me) to avoid the false-positives than to avoid these kinds of false negatives if only one is possible. I already know about the void*-cast to suppress the warning. I tried doing that in our code base and it was required in too many places, all of which were correct (as in no actual misuse was found). Additionally, this trips in third-party code that we'd rather not alter unless there is an actual bug. As a potential alternative, adding an attribute like [[gnu::memaccessable]] that can be put on a type to suppress the warning for uses of that type might also work.