C++ 11標準でテンプレート化された共用体について何か言いますか? (私はhttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdfで何かを見つけることができませんが、私は慎重にそれを読んでいない。)C++でテンプレート化された共用体11
私はこのコードは(error: expected primary-expression before ‘.’ token
を言ってerror: a designator into a template-dependent type is not allowed
、g++ -std=c++0x
を言ってicpc -std=c++11
を引き起こし、g++ -std=c++11
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(実験的))はinternal compiler error: in lookup_field_1, at cp/search.c:387
と言います。 { .a = t }
をt
に置き換えてこの問題を回避できます。しかし、私は組合の最初のメンバーではないフィールドではこれを行うことができませんでした。関連するメンバがテンプレートに依存するテンプレート化された共用体で、最初のメンバ以外のメンバを選択する方法はありますか? (私はもちろん、スタック上に組合を宣言し、メンバーを私が望む値に設定することもできますが、イニシャライザリストやconstexpr
関数ではできませんでした)
テンプレート化された共用体に関する一般的な質問:http://stackoverflow.com/q/20743582/1147772 – Drax