Hi, this might be a bit of a pedantic email but I'm going through and cleaning up my code on some of my threading work and wondered about the style guidelines around struct/class. Technically, the Google style guide states...
--- structs should be used for passive objects that carry data, and may have associated constant. All fields must be public. The struct must not have invariants that imply relationships between different fields, since direct user access to those fields may break those invariants. Constructors, destructors, and helper methods may be present; however, these methods must not require or enforce any invariants. If more functionality or invariants are required, a class is more appropriate. If in doubt, make it a class. For consistency with STL, you can use struct instead of class for stateless types, such as traits, template metafunctions, and some functors. --- ...this seems to be at odds with Arrow's current implementation which uses structs in a number of places that don't follow those rules. Using structs is certainly more convenient when possible since it allows for aggregate types that can use list initialization. I asked a bit on Zulip and it was recommended I bring this up here but also that it should probably be ok to use structs in cases where access controls are not needed. For example, a pimpl inner type (Impl) or some other situation where there is no way to get access to an instance of an inner type. 1) Does this match expectations? 2) Is it worth dropping a note in https://arrow.apache.org/docs/developers/cpp/development.html#code-style-linting-and-ci ? -Weston