C++ 11標準對模板化工會說了什麼嗎? (我找不到http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf什麼,但我沒有說仔細閱讀。)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;
}
此代碼會導致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
(版本4.8.0(實驗))來說internal compiler error: in lookup_field_1, at cp/search.c:387
。我可以通過用t
替換{ .a = t }
來解決這個問題。但是,我不能爲不屬於工會第一個成員的領域做到這一點。有沒有辦法在模板聯盟中挑選除第一個成員之外的其他成員,其中相關成員是依賴於模板的? (當然,我可以在棧上聲明一個聯合,並將該成員設置爲等於我想要的值,但是我不能在初始化程序列表或constexpr
函數中執行此操作。)
有關模板聯合的一般問題:http://stackoverflow.com/q/20743582/1147772 – Drax