Почему 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.