Bonjour,

J'ai le code suivant qui compile parfaitement avec g++ (4.4.5 et 4.5.3 avec les options -W -Wall -ansi -pedantic) mais je trouve cela bizarre !

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct Foo {
    Foo(const int& n) : m_foo(n) {};
    int m_foo;
};
 
struct Bar {
    Bar(const Foo& f) : m_foo(f)  {};
    Foo m_foo;
};
 
int main(void) {
    Bar a(456);  // bizarre que ça marche et que g++ ne me dise rien
    Foo b(1999);  
    Bar c(b); // ça marche et c'est normal
}
Normalement je devrais pouvoir créer un objet Bar à partir d'un objet Foo ou comme copie d'un autre objet Bar. Mais là, en utilisant un entier, ça marche ! J'imagine que g++ crée un objet Foo en douce lors de la construction de l'objet a.

J'ai remplacé la liste d'initialisation par une affectation dans le corps du constructeur de Bar et là la compilation échoue.

J'ai eu beau chercher je n'ai pas trouvé de référence à ce comportement. Est-ce dans la norme C++ ? Est-ce un comportement propre à g++ ?