Следующая программа
#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