Seperti yang saya catat dalam komentar, G++ tidak mendukung penginisialisasi yang ditunjuk standar C99, tetapi mendukung ekstensi GNU ke C90 yang memungkinkan penginisialisasi yang ditunjuk. Jadi ini tidak berhasil:
union value_t {
char * v_cp;
float v_f;
};
union value_t my_val = { .v_f = 3.5f };
Tapi ini tidak:
union value_t my_val = { v_f: 3.5f };
Ini tampaknya merupakan interaksi koordinasi yang buruk antara komite standar C dan C++ (tidak ada alasan yang sangat bagus mengapa C++ tidak mendukung sintaks C99, mereka hanya belum mempertimbangkannya) dan politik GCC (C++ seharusnya ' t mendukung sintaks C99 hanya karena ada di C99, tetapi harus mendukung sintaks ekstensi GNU yang mencapai hal yang persis sama karena itu adalah ekstensi GNU yang dapat diterapkan ke salah satu bahasa).
Saya mengalami masalah yang sama hari ini. g++ dengan -std=c++11 dan c++14 mendukung penginisialisasi yang ditunjuk, tetapi Anda masih bisa mendapatkan kesalahan kompilasi "test.cxx:78:9:maaf, tidak diterapkan:penginisialisasi yang ditunjuk non-sepele tidak didukung" jika Anda jangan menginisialisasi struct dalam urutan anggotanya telah ditentukan. Sebagai contoh
struct x
{
int a;
int b;
};
// This is correct
struct x x_1 = {.a = 1, .b = 2};
// This will fail to compile with error non-trivial designated initializer
struct x x_2 = {.b = 1, .a = 2};