``` extern(C++) struct Foo { protected int a = 1; } ``` generates currently: ``` struct Foo { int32_t a; Foo() {} }; ``` expected: ``` struct Foo { protected int32_t a; Foo() {} }; ```
This also applies to `private` and likely all other protection attributes: ``` extern(C++) struct Foo { private int a = 1; } ``` generates currently: ``` struct Foo { int32_t a; Foo() {} }; ```
@MoonlightSentinel created dlang/dmd pull request #11804 "Fix 21218 - protection attributes should be emitted to C++ headers" fixing this issue: - Fix 21218 - protection attributes should be emitted to C++ headers Properly track the current protection while writing struct/class members and add `public:`, `protected:` or `private:` as necessary. `package` and `package(...)` is currently mapped to `protected` as there is no real equivalent in C++. https://github.com/dlang/dmd/pull/11804
dlang/dmd pull request #11804 "Fix 21218 - protection attributes should be emitted to C++ headers" was merged into master: - f0ebacdb3b8e91cbeb42ed86f2123dada7f68658 by MoonlightSentinel: Fix 21218 - protection attributes should be emitted to C++ headers Properly track the current protection while writing struct/class members and add `public:`, `protected:` or `private:` as necessary. `package` and `package(...)` is currently mapped to `protected` as there is no real equivalent in C++. https://github.com/dlang/dmd/pull/11804