VS 2005 rvalue conversion et opérateur =
Bonjour,
après m'être rendu compte que lier une rvalue à une lvalue n'est effectivement pas permis dans la norme contrairement à ce que permet VS 2005
Code:
1 2 3 4 5 6 7 8 9
| struct SomeType{};
SomeType GetType()
{ return SomeType (); }
void TakeType(SomeType & Other)
{}
TakeType( GetType() ); // ? Ok pour VS 2005 |
j'essaye d'implémenter une sorte de Idioms/Move Constructor, comme le fait auto_ptr ; sauf que VS 2005 me renvoie l'erreur error C2679: '=' binaire*: aucun opérateur trouvé qui accepte un opérande de partie droite de type 'TReturn' (ou il n'existe pas de conversion acceptable)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| class TReturn;
class TReturnRef
{
private:
TReturn & ref;
public:
TReturnRef(TReturn & ref)
: ref(ref)
{}
};
class TReturn
{
public:
// template<typename T> // workaround
operator TReturnRef()
{ return TReturnRef(*this); }
};
class TUse
{
public:
TUse & operator=(TReturnRef Ref)
{ return *this; }
};
TReturn GetReturn()
{ return TReturn(); }
[...]
TUse Use;
Use = GetReturn(); // erreur ici
[...] |
J'ai trouvé un contournement (-> décommenter la ligne // workaround), mais je me demande si je n'ai pas loupé quelque chose ou sinon s'il n'y pas une meilleure parade.