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;
}
此代码导致icpc -std=c++11
say error: a designator into a template-dependent type is not allowed
、g++ -std=c++0x
to sayerror: expected primary-expression before ‘.’ token
和g++ -std=c++11
(version 4.8.0 (experimental)) to say internal compiler error: in lookup_field_1, at cp/search.c:387
。我可以通过替换来解决这个{ .a = t }
问题t
。但是,对于不是联盟的第一个成员的字段,我不能这样做。有没有办法选择模板联合中的第一个成员以外的其他成员,其中相关成员依赖于模板?(当然,我可以在堆栈上声明一个联合,并将成员设置为我想要的值。但我不能在初始化列表或constexpr
函数中这样做。)