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

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



ссылка на сообщение  Отправлено: 04.09.12 20:04. Заголовок: Баг компилятора GCC 4.7.1 относящийся к использованию trailing-return-type


Забавный баг имеет компилятор GCC 4.7.1, относящийся к использованию trailing-return-type. Этот баг позволяет разбить список спецификаторов типа на две части. Одна часть будет указана в самом списке спецификаторов типа, а другая часть в trailing-return-type. Чтобы было понятно, то приведу конкретный пример демонстрационного кода.

 void f( unsigned ( * )() -> int ) {} 

unsigned int h() { return 0; }

int main()
{
f( h );
}


В этом примере функция f объявляет параметр в виде указателя на функцию. Возвращаемый тип этой функции, который должен быть unsigned int разбит на две части. Первая часть с ключевым словом unsigned находится в списке спецификаторов типа, а вторая часть с ключевым словом int расположена в trailing-return-type.

Код примера успешно компилируется и выполняется компилятором GCC 4.7.1, хотя в объявлении параметра функции f используется некорректная синтаксическая конструкция.

Согласно параграфу №2 раздела 8.3.5 Functions стандарта С++


 цитата:
2 In a declaration T D where D has the form D1 ( parameter-declaration-clause ) cv-qualifier-seqopt ref-qualifieropt exception-specificationopt attribute-specifier-seqopt trailing-return-type
and the type of the contained declarator-id in the declaration T D1 is “derived-declarator-type-list T”, T shall be the single type-specifier auto.



То есть возможны лишь два вида объявления данного параметра. Либо как

unsigned int ( * )()

без включения trailing-return-type, либо как

auto ( * )() -> unsigned int

с единственным спецификатором типа auto.

Нужно отдать должное компилятору MS VC++ 2010, что он в отличии от GCC 4.7.1 код исходного демонстрационного примера не компилирует, то есть поступает в соответствии со стандартом С++.

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


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

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