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

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



ссылка на сообщение  Отправлено: 14.09.19 16:24. Заголовок: И еще один баг компилятора gcc нв этот раз относительно оператора new.


Следующая программа
 
#include <iostream>

int main()
{
const size_t N1 = 2;
const size_t N2 = 3;

int ( **p )[N1] = new ( int ( *[N2] )[N1] );
}


не компилируется компилятором C++ gcc HEAD 10.0.0 20190. Компилятор выдает следующее сообщение об ошибке

 
prog.cc: In lambda function:
prog.cc:8:40: error: expected '{' before ')' token
8 | int ( **p )[N1] = new ( int ( *[N2] )[N1] );
| ^
prog.cc: In function 'int main()':
prog.cc:8:34: error: no match for 'operator*' (operand type is 'main()::<lambda()>')
8 | int ( **p )[N1] = new ( int ( *[N2] )[N1] );
prog.cc:8:47: error: expected type-specifier before ';' token
8 | int ( **p )[N1] = new ( int ( *[N2] )[N1] );
| ^


Однако если заменить именованную константу N2 на ее значение 3 в вызове оператора new,

 
int ( **p )[N1] = new ( int ( *[3] )[N1] );

то программа компилируется

С другой стороны, исходная программа успешно компилируется компилятором clang HEAD 10.0.0

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


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

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