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

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

Я знаю, что С++ 03 не поддерживал С++ 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" } };

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

Ответ 1

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

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