Когда я использую литералы массивов, я вижу странное поведение на разных компиляторах.Array literal синтаксис quirks
Первая проблема, я лицо, когда у меня есть программа, как это:
void f(int*)
{
}
int main()
{
using T = int[];
f(T{1, 2, 3});
}
На Clang 3.5 это компилируется нормально, но на g++ 4.9 он дает ошибку:
source_file.cpp: In function ‘int main()’:
source_file.cpp:8:17: error: taking address of temporary array
f(T{1, 2, 3});
В VC++ он дает ошибку:
Process exit code is not 0: 255
Так странно.
Если я T
равно int[3]
вместо int[]
, он будет компилироваться на VC++, но все еще дает ту же ошибку на г ++.
Кроме того, если изменить код:
using T = int[];
int* x = T{1, 2, 3};
затем лязг выдает ошибку, аналогичную г ++.
Какой компилятор прав?
Я понял, как заставить его работать на g++, сделав параметр f
быть int (&&)[3]
, но в VC++ дает другую ошибку.
Связанный: [Использование массива списка инициализации в качестве временного в C++ 11?] (https://stackoverflow.com/questions/15458883/using-array-init-list- as-tempor-in-c11) –