Разница между бинарными литералами GCC и С++ 14?

С++ 14, похоже, идет, и компиляторы уже пытаются реализовать основные функции этой новой версии. Я смотрел на поддержку GCC для этих основных функций и заметил что-то о части бинарных литералов: GCC реализует их, но, похоже, имеет значение между Бинарные литералы GNU и бинарные литералы С++ 14. Вот соответствующие ссылки для обоих:

Я попытался найти некоторые различия между ними, поскольку GCC, похоже, имеет значение, но ничего не нашел. Кто-нибудь из вас знает больше о возможных несовместимостях?

Ответ 1

Из commit diff, который ввел поддержку в gcc 4.9, единственное различие заключается в том, что gcc теперь принимает бинарные литералы как языковые особенности С++ 1y и doesn 't предупреждать, что они являются gcc-расширением, если указана поддержка С++ 1y. Нет изменений в фактической реализации.

Ранее:

warning : binary constants are a GCC extension

Теперь, если не указано -std=c++1y:

warning : binary constants are a C..1y feature or GCC extension

Ответ 2

Я предполагаю, что разница заключается в том, что каждый из них является расширением, тогда люди не будут слишком склонны использовать его, а другие стандартно совместимы и доступны без включения расширений. Это формальность.

Ответ 3

Первым документом, на который вы указываете, является реализация GNU бинарных литералов как расширение языка C (т.е. это нестандартная функция C, и этот документ определяет, как gcc реализует расширение для языка).

Второй документ, на который вы указываете, - это предложение добавить бинарные литералы к языку С++ 11, но насколько я знаю, он не был принят ни (*), и это означает, что он не является частью стандартного С++, он остается как расширение языка, предоставляемое gcc.

Насколько я вижу, эта функция будет не переносимой для компиляторов, но вы можете определить собственную реализацию бинарного литерала на С++ 11, используя пользовательские литералы.

(*) s/не принимается/Я не могу найти ссылку на бинарные литералы в N3485 "Рабочий проект, стандарт для языка программирования С++", но это может быть функция, принятая для следующего стандарта С++.