私は、GCC 4.3.4とクラン2.9と両方の互換性のある方法で指定された属性を使用して構造体を初期化しようとしています。その後、GCCは、それがそのフラグを知らないので、構築することを拒否するので、C++でポータブルな方法で名前付き属性を使用してPOD構造体を初期化できますか?
struct A {
unsigned int x;
};
// GCC: error: expected primary-expression before '.' token
A a = {
.x = 0xdeadbeef;
};
// Clang: error: use of GNU old-style field designator extension [-Werror,-Wgnu-designator]
A a = {
x : 0xdeadbeef;
};
私は-Wno-GNU-指示にCXXFLAGS追加することはできません。私は、属性が命名されていない初期化リストを使用することはできません。APIが変更された場合、重大な問題が発生するためです。私が必要
ソリューションは、新しい属性は、彼らが初期化されていない(または好ましくはNULL)しなければならない構造体に表示された場合に事実を保持しつつ、C++標準に準拠する必要があります。構造体はサードパーティーなので、決して変更することはできません。
:
はに何か問題です。 –
は「私が必要とするソリューションは、標準C++に準拠しなければならない」 - これのどれもまだ++標準Cではありませんので、それは、その後、問題です。 C++ 03は名前付きメンバーによる初期化を持たず、GCC 4.3.4にはC++ 0xがあまりありません。 –