C++ 11 standardı şablonlu sendikalar hakkında bir şey söyler mi? ((Ben http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf şey bulamıyorum, ama o dikkatle okumadım.)Temperlenmiş sendikalar C++ 11
Ben
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;
}
Bu kod error: a designator into a template-dependent type is not allowed
, g++ -std=c++0x
error: expected primary-expression before ‘.’ token
söylemek söylemek icpc -std=c++11
neden var ve g++ -std=c++11
versiyon 4.8.0 (deneysel)) demek internal compiler error: in lookup_field_1, at cp/search.c:387
. { .a = t }
'u t
ile değiştirerek bunu başarabilirim. Bununla birlikte, sendikanın ilk üyesi olmayan alanlar için bunu yapamam. İlgili üyenin şablona bağımlı olduğu, templated bir birleşimdeki ilkinden başka bir üye seçmenin bir yolu var mı? (Tabii ki, yığın üzerinde bir birlik bildirebilir ve üye istediğim değere eşit olabilir. Ama bunu bir başlatıcı listesinde veya bir constexpr
işlevinde gerçekleştiremedim.)
Şablonlu birleşim hakkında genel soru: http://stackoverflow.com/q/20743582/1147772 – Drax