Форум » C/C++ » Обратная несовместимость стандарта С++ 2011 со стандартом С++ 2003 » Ответить

Обратная несовместимость стандарта С++ 2011 со стандартом С++ 2003

Сыроежка: С введением нового стандарта С++ 2011 уже нет обратной совместимости со стандартом С++ 2003. Читая новый стандарт относительно шаблонов, обнаружил две различные оценки одной и той же конструкции. В стандарте 2003 года упомянутая конструкция была корректной, а в стандарте 2011 она уже считается некорректной. Вот пример этой конструкции из раздела стандарта 14.2 параграф 3. [pre2]template <int i > class X {}; template <typename T> class Y {}; int main() { // стандарт 2003 Y<X<6>> 1> > x4; // Ok // стандарт 2011 // Y<X<6>> 1> > x4; // error }[/pre2] Я компилировал этот код старым компилятором Borland C++ Builder 5.0, и он скомпилировался без ошибок. При компиляции MS VC++ 2010 балы сгенерирована ошибка: "error C2143: синтаксическая ошибка: отсутствие ";" перед "константа"" То есть анализ имени специализированного шаблона закончился, когда после числа 6 встретились два знака >>. Для стандарта С++ 2003 эта конструкция соответствует конструкции Y<X<(6>> 1)> > x4;. Стандарта С++ 2011 так не считает.

Ответов - 0



полная версия страницы