Move semantics for a conversion operator

2019-03-27 22:09发布

问题:

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?

回答1:

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 doesn't implement this aspect of r-value references.