Tiêu chuẩn C++ 11 có nói gì về các công đoàn khuôn mẫu không? (Tôi không thể tìm thấy bất cứ điều gì trong http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf, nhưng tôi đã không đọc nó một cách cẩn thận.)Công đoàn phù hợp trong C++ 11
Tôi có
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;
}
Mã này gây icpc -std=c++11
nói error: a designator into a template-dependent type is not allowed
, g++ -std=c++0x
nói error: expected primary-expression before ‘.’ token
, và g++ -std=c++11
(phiên bản 4.8.0 (thử nghiệm)) để nói internal compiler error: in lookup_field_1, at cp/search.c:387
. Tôi có thể giải quyết vấn đề này bằng cách thay thế { .a = t }
bằng t
. Tuy nhiên, tôi không thể làm điều này cho các lĩnh vực mà không phải là thành viên đầu tiên của công đoàn. Có cách nào để chọn một số thành viên khác không phải là thành viên đầu tiên trong một liên minh có khuôn mẫu, nơi mà thành viên có liên quan phụ thuộc vào mẫu không? (Tôi có thể, tất nhiên, tuyên bố một công đoàn trên ngăn xếp, và thiết lập các thành viên bằng giá trị tôi muốn. Nhưng tôi không thể làm điều này trong một danh sách khởi tạo hoặc trong một hàm constexpr
.)
Câu hỏi chung về công đoàn khuôn mẫu: http://stackoverflow.com/q/20743582/1147772 – Drax