C99の複合リテラルはC++にはない
C++を書いていたら、GitHub Copilotが関数の引数として
&(int){1}という見慣れない構文を提案してきた
(int){1}はC99の複合リテラル(Compound literal)というやつらしい。複合リテラルはlvalueなので、&でアドレスを取れるしかし複合リテラルはC++には存在していない
例えば
void f(int *x) {} int main() { f(&(int){42}); return 0; }は、
clang(AppleClang 16.0.0)では何も言われないがclang++でコンパイルすると、次のエラーになる:src/main.cc:4:5: error: cannot take the address of an rvalue of type 'int' 4 | f(&(int){42}); |GCCでは拡張としてC++中でも複合リテラルを使うことができるようだ