Почему GCC 6.3 компилирует этот код Braced-Init-List без явной поддержки C++11?

У меня есть вопрос о различных значениях списка в фигурных скобках.

Я знаю, что C++03 не поддерживает C++11 initializer_list, Тем не менее, даже без -std=c++11 флаг компилятора, gcc 6.3 будет правильно инициализированinterpolate с этим кодом:

map<string, string> interpolate = { { "F", "a && b && c" }, { "H", "p ^ 2 + w" }, { "K", "H > 10 || e < 5" }, { "J", "F && !K" } };

Меня спросили, почему это сработает, и я понял, что у меня нет ответа. Это Brace-Init-List, но путь от инициализации стандартного контейнера обычно происходит через initializer_list, Так как же не-C++11 код будет выполнять инициализацию?

1 ответ

Решение

Команда компилятора по умолчанию для gcc 6.x:-std=gnu++14таким образом, компилятор неявно компилирует ваш код, используя более позднюю версию стандарта языка C++.

Вам нужно будет указать вручную -std=c++03 если вы хотите скомпилировать в C++03.

Другие вопросы по тегам