La question est simple. Pourquoi est-ce que ça compile :
bool b(true);
if (b) { /* */ }
Et ça compile :
if (bool b = true) { /* */ }
Mais pas ça :
if (bool b(true)) { /* */ }
Dans mon code réel, j'ai besoin de construire un objet et de le tester, tout en le faisant détruire à la fin du bloc if. En gros, je cherche quelque chose comme ça :
{
Dingus dingus(another_dingus);
if (dingus) {
// ...
}
}
Bien sûr, ça pourrait marcher :
if (Dingus dingus = another_dingus) { /* */ }
Mais alors je construis un Dingus
et en appelant operator=
sur elle. Il me semble logique que je puisse construire l'objet en utilisant le constructeur de mon choix.
Mais je ne comprends pas pourquoi ce n'est pas grammaticalement correct. J'ai testé avec G++ et MSVC++ et ils se plaignent tous les deux de cette construction, donc je suis sûr que cela fait partie de la spécification mais je suis curieux de savoir quel est le raisonnement pour cela et quelles sont les solutions de contournement non moches qu'il peut y avoir.