c++11 標準は、テンプレート化された共用体について何か述べていますか? ( http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdfには何も見つかりませんが、それほど注意深く読んでいません。)
私は持っている
template<typename T>
union u {
T a;
char b;
};
template<typename T>
u<T> make_u(T t) {
return { .a = t };
}
int main() {
return make_u<int>(1).a;
}
このコードにより、、 、および(バージョン 4.8.0 (実験的)) が と言われicpc -std=c++11
ます。に置き換えることでこれを回避できます。ただし、ユニオンの最初のメンバーではないフィールドに対してはこれを行うことができませんでした。関連するメンバーがテンプレートに依存しているテンプレート化されたユニオンの最初のメンバー以外のメンバーを選択する方法はありますか? (もちろん、スタックで共用体を宣言し、必要な値に等しいメンバーを設定することはできます。しかし、初期化子リストまたは関数でこれを行うことはできませんでした。)error: a designator into a template-dependent type is not allowed
g++ -std=c++0x
error: expected primary-expression before ‘.’ token
g++ -std=c++11
internal compiler error: in lookup_field_1, at cp/search.c:387
{ .a = t }
t
constexpr