Candy Chiu
Candy Chiu

Reputation: 6679

Move semantics for a conversion operator

What's the syntax for a movable conversion operator?

I have a wrapper that wraps around obj, which has an obj conversion operator:

class wrap {
public:
   operator obj() { ... }
private:
   obj data_;
};

How can I find out whether data_ should be copied or moved?

Upvotes: 8

Views: 2198

Answers (1)

Nicol Bolas
Nicol Bolas

Reputation: 474536

The syntax for that would be something like this:

class wrap {
public:
   operator obj() const & { ... }   //Copy from me.
   operator obj() && { ... }  //Move from me.
private:
   obj data_;
};

The first version will be called when the second version cannot be called (ie: the wrap instance being converted is not a temporary or there is no explicit use of std::move).

Note that Visual Studio didn't implement this aspect of r-value references in VS11.

Upvotes: 12

Related Questions