On-line: гостей 0. Всего: 0 [подробнее..]
Программисты всех стран, объединяйтесь!

АвторСообщение



ссылка на сообщение  Отправлено: 28.07.12 17:52. Заголовок: Обратная несовместимость стандарта С++ 2011 со стандартом С++ 2003


С введением нового стандарта С++ 2011 уже нет обратной совместимости со стандартом С++ 2003. Читая новый стандарт относительно шаблонов, обнаружил две различные оценки одной и той же конструкции. В стандарте 2003 года упомянутая конструкция была корректной, а в стандарте 2011 она уже считается некорректной. Вот пример этой конструкции из раздела стандарта 14.2 параграф 3.

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
}


Я компилировал этот код старым компилятором Borland C++ Builder 5.0, и он скомпилировался без ошибок. При компиляции MS VC++ 2010 балы сгенерирована ошибка: "error C2143: синтаксическая ошибка: отсутствие ";" перед "константа"" То есть анализ имени специализированного шаблона закончился, когда после числа 6 встретились два знака >>.
Для стандарта С++ 2003 эта конструкция соответствует конструкции Y<X<(6>> 1)> > x4;. Стандарта С++ 2011 так не считает.

Спасибо: 0 
ПрофильЦитата Ответить
Новых ответов нет


Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 0
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет