はじめに C++ には anonymous union という機能があります。 JIS 規格は参照していませんが、日本語では「無名共用体[1]」と呼ぶのが一般的なようです。 本記事でもこの呼び方を採用します。 どうも C++98 から存在していた機能のようですが、私はこれの存在を知らなかったので実際に遭遇して驚きました。 なお、本記事における C++ は C++20 を想定しており、規格書は N4861 を参照しています。 遭遇したコード 思いっきり抜粋しましたが、次の Hoge クラスのプライベートメンバが無名共用体です。 class Hoge { public: class A { ... }; class B { ... }; private: // これが無名共用体 union { A a_; B b_; }; }; ご存知の方には何でもないコードでしょうが、私は理解できなくて (