Несколько дней назад я обнаружил составные литералы в ответе Как использовать setsockopt(SO_REUSEADDR)?
Поэтому я попытался скомпилировать простой код:
#include <stdio.h>
int main()
{
int * ptr = &(int) {3};
printf("%d\n", *ptr);
return 0;
}
Используя gcc 4.9.1, он собирается и работает так, как ожидалось, печатает «3», а valgrind не сообщает о повреждении памяти.
Однако при использовании g++ 4.9.1 он не строится:
$ g++ main.c
main.c: In function ‘int main()’:
main.c:4:23: error: taking address of temporary [-fpermissive]
int * ptr = &(int) {3};
^
Есть ли способ (например, опция g++) для поддержки составного литерала?
int* p = &3;
, что тоже разумно. Что плохого в том, чтобы сказатьint i = (int){3}; printf("%d\n", i);
вместо того, чтобы попытаться взять его адрес? - person Jonathan Wakely   schedule 13.08.2014