Bonjour,

Le code suivant compile :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
struct test {
    int i, j;
};
 
int main() {
    test t{0,1};
    return 0;
}
... alors que celui-ci ne compile pas (gcc 4.7 et clang 3.3 sont d'accord) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct base {};
 
struct test : /* private */ base {
    int i, j;
};
 
int main() {
    test t{0,1}; // erreur: aucun constructeur ne correspond
    // note: candidats possibles:
    // note:  test()
    // note:  test(const test&)
    // note:  test(test&&)
    return 0;
}
J'ai rencontré ce problème dans un cas où base ne contient vraiment aucune donnée et fonction membre, et ne sert qu'à fournir des typedefs et autres constantes de compilations. J'ai de nombreuses structures comme test, et j'aimerai bien éviter d'avoir à me farcir un constructeur trivial pour chacune d'entre elle... Autrement dit, je sais qu'une solution est d'ajouter test(int i_, int j_) : i(i_), j(j_) {} dans test, mais c'est pénible (à la fois à écrire et à maintenir).

Connaissez-vous un moyen pour ré-activer l'initialisation uniforme dans ce cas là ?

Merci.