Cómo codificar grandes estructuras de datos constantes y complejas en C ++

En el pasado, he usado gcc's.Extensión de literal compuesto de estilo C99 a C ++ para codificar estructuras de datos constantes anidadas en el código. Aquí hay un ejemplo:

#include <iostream>
using namespace std;

struct Tree {
    const char *name;
    const Tree *left;
    const Tree *right;
};

const Tree *const tree = (Tree []) {
    "top", // name
    (Tree[]) {
        "left",
        0,
        0
    },
    (Tree[]) {
        "right",
        0,
        0
    }
};

static void dump(const Tree *tree) {
    if (!tree) {
        cout << "null";
        return;
    }

    cout << tree->name << "(";
    dump(tree->left);
    cout << ", ";
    dump(tree->right);
    cout << ")";
}

int main(void) {
    dump(tree);
    cout << "\n";
}

La idea es usar la duración del almacenamiento estático para estas estructuras constantes razonablemente grandes, con cero costos de inicialización y, de hecho, no es necesario almacenar nada en la memoria a menos que sea necesario.

Sin embargo, esto ya no funciona en la versión reciente de clang, y el último OS X incluye un clang con el nombre 'gcc'. Así que necesito una solución diferente.

¿Cuál es la mejor expresión idiomática que se ajusta a la norma para esto en C ++?

Particularmente, no quiero pagar el costo de construir todos los objetos en estas estructuras, por lo que si se puede evitar, sería grandioso.

Respuestas a la pregunta(2)

Su respuesta a la pregunta