En travaillant sur this question, j'ai trouvé un comportement incohérent. Pourquoi la liaison de référence se comporte-t-elle différemment dans un constructeur à partir d'une fonction commune?const référence de liaison à un rvalue
struct A {
};
struct B : public A {
B(){}
private:
B(const B&);
};
void f(const B& b) {}
int main() {
A a(B()); // works
A const & a2 = B(); // C++0x: works, C++03: fails
f(B()); // C++0x: works, C++03: fails
}
Je l'ai testé pour C++ 03 avec g ++ - 4.1 et Comeau 4.2.45.2 dans le strict mode de C++ 03 et C++ 0x des extensions. J'ai les mêmes résultats.
Pour C++ 0x a été testé avec g ++ - 4.4 et Comeau 4.3.9 en mode relâché et avec les extensions C++ 0x activées. J'ai les mêmes résultats.
connu comme étant « l'analyse syntaxique le plus contrariant ». – earl
Je ne peux pas attendre le jour où je pourrais dire à quelqu'un "que vous avez été victime du problème d'analyse le plus ennuyeux". Bien sûr, au moment où cela se produira, je l'oublierai complètement et recommencerai à détester le C++. –