Page 1 of 1

Retro ingéniéring c++11

PostPosted: Tue 6 Nov 2012 19:36
by Teaniel
Bonjour,

Vous êtes sans doute déjà au courant, mais bon, au cas ou :
Le retro ingéniering c++ ignore les nouveaux types de pointeurs (&&) et les considère comme des erreurs, ce qui le conduit à ignorer l'argument auquel il s'attache, ainsi que le corps de la fonction. Ce corps est remplacé par celui d'une autre (pour l'instant je ne l'ai utilisé que dans un constructeur de copie et il est remplacé par celui du constructeur par défaut) .
Pour rappel, ce nouveau symbole représente les arguments passés par référence lorsque ladite référence pointe sur une rvalue. Dans mon utilisation cela permet d'éviter les copies profondes en particulier lors des retours de fonctions.

Code: Select all
class A {
    int *i = nullptr;
    A() {}
    A( const A &a ) : i(a.i ? new int(*a.i) : nullptr) {} // constructeur de copie normal OK
    A( A &&a ) : i(a.i) { a.i=nullptr; } // constructeur de copie 'rapide' --> non reconnu par la rétro ingéniérie. on se retrouve avec un deuxieme A() {}
    ...
};


Cordialement,
Marc

Re: Retro ingéniéring c++11

PostPosted: Sun 11 Nov 2012 12:57
by Bruno Pagès
Bonjour,

Oui je suis au courant pour &&, la grosse nouveauté introduite par la version 5.1 concerne justement C++11

Ce sera sera corrigé dans la prochaine version

Re: Retro ingéniéring c++11

PostPosted: Sun 2 Dec 2012 21:58
by Bruno Pagès
La version 6.4 est disponible et corrige ce problème