Возможно, я обнаружил ошибку с GCC v4.8.2, но сначала хочу проверить, прежде чем я отправлю ее, поскольку это может быть мне что-то не так!Это ошибка GCC? Инициализация структур с помощью объединений
Следующий код:
#include <vector>
struct Message
{
typedef union {
char byte;
const char *str;
} Parameter;
Parameter p1;
Parameter p2;
};
int main()
{
std::vector<Message> messages_;
messages_.push_back({{ .byte = 'a' }});
Message message = {{ .byte = 'a' }, { .str = "Hello World" }};
messages_.push_back(message);
messages_.push_back({{ .byte = 'a' }, { .str = "Hello World" }});
}
clang++ -std=c++11 main.cpp
компилирует этот штраф. Однако g++
выводит это:
main.cpp: In function ‘int main()’:
main.cpp:23:66: internal compiler error: in reshape_init_class, at cp/decl.c:5216
messages_.push_back({{ .byte = 'a' }, { .str = "Hello World" }});
^
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://bugzilla.redhat.com/bugzilla> for instructions.
Preprocessed source stored into /tmp/ccrf5vwr.out file, please attach this to your bugreport.
я представить это как ошибку, если никто не имеет каких-либо идей, хотя в моем опыте проблема программисты почти никогда не ошибка компилятора и почти всегда по своей вине!
'Пожалуйста, отправьте полный отчет об ошибке 'уже ответ –
Внутренняя ошибка компилятора всегда является ошибкой компилятора. – soon
Технически я бы сказал, что для компиляции это должно требовать '-std = g ++ 11', поскольку назначенные инициализаторы (или то, что они называются) являются C, а не C++. – Angew