難しい方法ですが、少なくともboost::program_options
コンパイラで構成された構造体メンバーの配置に依存していることがわかりました。
デフォルト設定を使用してブーストをビルドし、4 バイト アラインメント ( /Zp4
) を使用してプロジェクトにリンクすると、実行時に失敗します (program_options で最小限のテストを行いました)。Boost は不適切な呼び出し規約の可能性を示すアサートを生成しますが、本当の理由は構造体メンバーの配置です。
これを防ぐ方法はありますか?アラインメントによってコードに互換性がなくなる場合、これをライブラリの命名に含めるべきではありませんか?