Allow direct field initialization of structs if, and only if, the it is an aggregate.

In C++14 mode (which we, apparently, currently test with[0]) this is a pure restriction: it disallows direct initialization if there is e.g. a constructor.

In C++17 and up, it allows direct initialization of derived classes, which were previously forbidden.

This was harder to debug than I expected, because I A) didn't know that derived classes could only become aggregates starting in C++20, B) didn't know we built in C++14 mode. (This is definitely a bug, filed b/232984274).

[0]: in particular, `getLangOpts()` in gdb reports:

```
...
CPlusPlus = 1, CPlusPlus11 = 1, CPlusPlus14 = 1, CPlusPlus17 = 0, CPlusPlus20 = 0, CPlusPlus2b = 0,
...
```
PiperOrigin-RevId: 449630728
15 files changed
tree: d69c8b9041525f009c8fffc8d54010cfd2497d23
  1. cc_template/
  2. common/
  3. docs/
  4. lifetime_annotations/
  5. migrator/
  6. rs_bindings_from_cc/
  7. BUILD
  8. CODE_OF_CONDUCT
  9. CONTRIBUTING
  10. LICENSE
  11. README.md
README.md

Crubit: C++/Rust Bidirectional Interop Tool

Extremely experimental interop tooling for C++ and Rust.

Please don‘t use, this is an experiment and we don’t yet know where will it take us. There will be breaking changes without warning. Unfortunately, we can't take contributions at this point.