libstdc++ では、<iostream>
headerはのインスタンスを定義ios_base::Init
します。そのコンストラクターはアトミックにカウンターを増やし、カウンターが 0 の場合は cin/cout/cerr を初期化します#include <iostream>
。
と同じ動作の初期化子を実装したいios_base::Init
、つまり、別のグローバル変数のコンストラクターで使用される前に、ヘッダーをインクルードするとすぐにグローバル オブジェクトの一部が初期化されることを保証したい。ただし、これはアトミック操作を使用する必要があります。libstdc++ は、標準ではない GCC の拡張を使用します: http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/src/c%2B%2B98/ios_init.cc?view=markup
std::atomic を効率的に使用する方法 によると、std::atomic はアトミック操作を行う唯一の標準的な方法であるため、すべての TU で初期化子の前にグローバル アトミック変数を構築する必要があります。それを初期化するには、それを初期化する別の初期化子が必要です。悲しいことに、無限再帰に行きます。
だから私の質問は、それを行うための最良の標準的な方法は何ですか?