Can explicitly defaulted / deleted functions overload on ref qualifiers?

c++, c++11

Solution

Yes, but there's not much use, as constructors and destructors can't be ref-qualified.

You can ref-qualify assignment operators:

struct S {
  S &operator=(const S &) && = default;
};

int main() {
  S s;
  S() = s;  // OK
  s = S();  // error - LHS must be an rvalue
}

However, I'm somewhat at a loss to imagine what this would be useful for.

Problem

INTRO Ref qualifiers : A way to dissambiguate the rl-valuness of the implied object. As a quick example, take the following class ``` class example { int member; public: // ... int& value() &; // ^ int&& value() &&; // ^^ int const& value() const&; // ^ }; ``` The use of this C++11 feature (syntax marked with `^`), allows us to control the version of `value()` that will be called with - l-values - temporaries - const l-values Practically the ref qualification applies to the classe's `*this` Defaulted / Deleted functions : Specify a special member function as having the compiler generated (default) definition or inaccessible (delete). As an example take ``` struct type { type(const type&) = delete; type& operator=(const type&) = delete; }; ``` The above struct, achieves being non copyable with extremely clear semantics QUESTIONs - Is it possible / valid to combine these features ? - Which are the cases where it's explicitly forbidden or bad style ? - Is there any use case / pattern for such a combination ? (Eg creating conditional interfaces based rl-valueness quick and easy)

Original source

Related problems