---
title: "Forbid defaulting operator=(X&&) &&"
document: P2953R4
date: 2026-02-22
audience: "EWGI SG17: EWG Incubator"
reply-to:
  - "Matthew Taylor"
  - "Arthur O'Dwyer"
paper-type: proposal
---

---

## Changelog

- R4: R3: Expand motivation: [P3834] also has to solve this problem. Update references to standard versions and features that didn’t make C++26. Propose the "ambitious" wording by default. R2 (pre-Sofia): Add poll results from the EWG telecon of 2025-01-08. Add electronic poll results after the EWG telecon of 2025-01-08. Update the vendor-divergence table: GCC has fixed [#116162](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162). Replace the word "signature" with "declaration" in the motivation section. ("Signature" doesn’t include return type.) Add a missing clause to the "ambitious" wording. (Thanks, Jens Maurer.) R1: Propose an "ambitious" wording as well as the "conservative" surgery.
  - Implementation of ambitious approach, deployment considerations.

## Motivation and proposal

Currently, [[dcl.fct.def.default]/2.5](https://eel.is/c++draft/dcl.fct.def.default#2.5) permits an explicitly defaulted special member function to differ from the implicit one by adding *ref-qualifiers*, but not *cv-qualifiers*.

For example, the declaration `const A& operator=(const A&) const& = default` is forbidden because it is additionally const-qualified, and also because its return type differs from the implicitly-defaulted `A&`. This might be considered unfortunate, because it’s a reasonable signature for a const-assignable proxy-reference type. But programmers aren’t clamoring for that declaration to be supported, so we do not propose it here.

Our concern is that the *unrealistic* declaration `A& operator=(const A&) && = default` is *permitted!* This has several minor drawbacks:

- The possibility of these unrealistic declarations makes C++ harder to understand. Additional papers in this space (such as [P3834]) must consider adding new, similarly implausible signatures to the language to remain consistent with this oddity. The quirky interaction with [CWG2586] and [P2952] discussed in the next subsection. The wording to permit these declarations is at least a tiny bit more complicated than if they weren’t permitted.

To eliminate these drawbacks, we propose that an explicitly defaulted copy/move assignment operator should not be allowed to add an *rvalue* ref-qualifier to the type it would have had if implicitly defaulted.

```
struct C {
  C& operator=(const C&) && = default;
    // C++26: Well-formed
    // Proposed: Unusable (deleted or ill-formed)
};

struct D {
  D& operator=(this D&& self, const C&) = default;
    // C++26: Well-formed
    // Proposed: Unusable (deleted or ill-formed)
};
```

This proposal applies only to *explicitly defaulted* `operator=`, and only when the object parameter itself is rvalue-ref-qualified. We propose that it remain legal to write rvalue-ref-qualified `operator=` functions by hand; the compiler simply shouldn’t assume it knows how to default one.

We present two options to resolve this issue: Our preferred approach makes many problematic declarations ill-formed; an alternative "conservative" approach makes them defaulted-as-deleted.

When reviewing existing wording in [[dcl.fct.def.default]/2.6](https://eel.is/c++draft/dcl.fct.def.default#2.6), we noticed that this current wording also permits *cv*-qualified assignment operators, and move assignment operators which accept a *cv*-qualified non-object parameter, to be defaulted-as-deleted. These signatures are similarly arcane, we expect that no users make use of them, and these signatures don’t help with template programming either (see § 2.2 "Deleted" versus "ill-formed"). Therefore we propose making all these signatures ill-formed too.

In summary, our preferred wording makes all of the below declarations ill-formed, while our "conservative" wording makes them all deleted instead:

```
//rvalue-ref-qualified overload (permitted in '26)
foo& operator=(const foo&) && = default;
foo& operator=(foo&&) && = default;

//cv-qualified overload (deleted in '26)
foo& operator=(const foo&) const = default;
foo& operator=(foo&&) const = default;

//cv-qualified rvalue reference parameter (deleted in '26)
foo& operator=(const foo&&) = default;
```

### Interaction with P2952

[CWG2586] (adopted for C++23) permits `operator=` to have an explicit object parameter.

[P2952] (currently in CWG for C++29) proposes that defaulted `operator=` overloads should (also) be allowed to have a placeholder return type. If C++29 gets P2952 without P2953, then we’ll have:

```
struct C {
  auto&& operator=(this C&& self, const C&) { return self; }
    // C++26: OK, still deduces C&&

  auto&& operator=(this C&& self, const C&) = default;
    // C++26: Ill-formed, return type contains auto
    // C++29 after P2952: OK, deduces C&
    // Proposed (preferred): Ill-formed, object parameter is not C&
    // Proposed (conservative): Deleted, object parameter is not C&
};
```

The first, non-defaulted, operator "does the natural thing" by returning its left-hand operand, and deduces `C&&`. The second operator also "does the natural thing" by being defaulted; but it deduces `C&`, just like any other defaulted assignment operator. The two "natural" implementations deduce different types! This looks inconsistent.

If we adopt P2953 alongside P2952, then the second `operator=` will go back to being unusable, which reduces the perception of inconsistency.

| C++26
      P2952
     
C++26
      `C&&`/ill-formed
      `C&&`/`C&`

P2953
      `C&&`/ill-formed
      `C&&`/ill-formed | C++26
      P2952
     
C++26
      `C&&`/ill-formed
      `C&&`/`C&`

P2953
      `C&&`/ill-formed
      `C&&`/ill-formed | P2952
     
C++26
      `C&&`/ill-formed
      `C&&`/`C&`

P2953
      `C&&`/ill-formed
      `C&&`/ill-formed | C++26
      `C&&`/ill-formed
      `C&&`/`C&`

P2953
      `C&&`/ill-formed
      `C&&`/ill-formed | `C&&`/ill-formed
      `C&&`/`C&`

P2953
      `C&&`/ill-formed
      `C&&`/ill-formed | `C&&`/`C&`

P2953
      `C&&`/ill-formed
      `C&&`/ill-formed | P2953
      `C&&`/ill-formed
      `C&&`/ill-formed | `C&&`/ill-formed
      `C&&`/ill-formed | `C&&`/ill-formed |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| C++26
      `C&&`/ill-formed
      `C&&`/`C&`

P2953
      `C&&`/ill-formed
      `C&&`/ill-formed | `C&&`/ill-formed
      `C&&`/`C&`

P2953
      `C&&`/ill-formed
      `C&&`/ill-formed | `C&&`/`C&`

P2953
      `C&&`/ill-formed
      `C&&`/ill-formed | P2953
      `C&&`/ill-formed
      `C&&`/ill-formed | `C&&`/ill-formed
      `C&&`/ill-formed | `C&&`/ill-formed |  |  |  |
| P2953
      `C&&`/ill-formed
      `C&&`/ill-formed | `C&&`/ill-formed
      `C&&`/ill-formed | `C&&`/ill-formed |  |  |  |  |  |  |

### "Deleted" versus "ill-formed"

(See also [P2952] §3.2 "Defaulted as deleted".)

[[dcl.fct.def.default]/2.6](https://eel.is/c++draft/dcl.fct.def.default#2.6) goes out of its way to make many explicitly defaulted constructors, assignment operators, and comparison operators "defaulted as deleted," rather than ill-formed. This was done by [P0641] (resolving [CWG1331]), in order to support class templates with "canonically spelled" defaulted declarations:

```
struct A {
  // Permitted by (2.4)
  A(A&) = default;
  A& operator=(A&) = default;
};

template<class T>
struct C {
  T t_;
  explicit C();
  // Permitted, but defaulted-as-deleted, by (2.6), since P0641
  C(const C&) = default;
  C& operator=(const C&) = default;
};

C<A> ca; // OK
```

There is similar wording in [[class.spaceship]](https://eel.is/c++draft/class.spaceship#2.2.sentence-2) and [[class.eq]](https://eel.is/c++draft/class.eq#2.sentence-1). We don’t want to interfere with these use-cases; that is, we want to continue permitting programmers to write things like the above `C<A>`.

We consider the carve-out for the copy assignment operator of `C<A>` in the above example sensible and do not intend to interfere with it. However, as nobody ever writes `B& operator=(const B&) && = default` we do not need to add any *new* carveouts.

### Existing corner cases

There is vendor divergence in some corner cases. Here is a table of the divergences we found, plus our opinion as to the currently conforming behavior, and our proposed behavior. Red cells in this table indicate non-conformance among vendors today.

| URL
      Code
      Clang
      GCC
      MSVC
      EDG
      Correct
      Proposed
(conservative)
      Proposed
(preferred)
     
[link](https://godbolt.org/z/WezedYYE3)

C& operator=(C&) = default;
✓
      ✓
      ✓
      ✓
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | Code
      Clang
      GCC
      MSVC
      EDG
      Correct
      Proposed
(conservative)
      Proposed
(preferred)
     
[link](https://godbolt.org/z/WezedYYE3)

C& operator=(C&) = default;
✓
      ✓
      ✓
      ✓
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | Clang
      GCC
      MSVC
      EDG
      Correct
      Proposed
(conservative)
      Proposed
(preferred)
     
[link](https://godbolt.org/z/WezedYYE3)

C& operator=(C&) = default;
✓
      ✓
      ✓
      ✓
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | GCC
      MSVC
      EDG
      Correct
      Proposed
(conservative)
      Proposed
(preferred)
     
[link](https://godbolt.org/z/WezedYYE3)

C& operator=(C&) = default;
✓
      ✓
      ✓
      ✓
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | MSVC
      EDG
      Correct
      Proposed
(conservative)
      Proposed
(preferred)
     
[link](https://godbolt.org/z/WezedYYE3)

C& operator=(C&) = default;
✓
      ✓
      ✓
      ✓
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | EDG
      Correct
      Proposed
(conservative)
      Proposed
(preferred)
     
[link](https://godbolt.org/z/WezedYYE3)

C& operator=(C&) = default;
✓
      ✓
      ✓
      ✓
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | Correct
      Proposed
(conservative)
      Proposed
(preferred)
     
[link](https://godbolt.org/z/WezedYYE3)

C& operator=(C&) = default;
✓
      ✓
      ✓
      ✓
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | Proposed
(conservative)
      Proposed
(preferred)
     
[link](https://godbolt.org/z/WezedYYE3)

C& operator=(C&) = default;
✓
      ✓
      ✓
      ✓
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | Proposed
(preferred)
     
[link](https://godbolt.org/z/WezedYYE3)

C& operator=(C&) = default;
✓
      ✓
      ✓
      ✓
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/WezedYYE3)

C& operator=(C&) = default;
✓
      ✓
      ✓
      ✓
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | C& operator=(C&) = default;
✓
      ✓
      ✓
      ✓
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      ✓
      ✓
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      ✓
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
     
[link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
     
[link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗ | ✗ |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| [link](https://godbolt.org/z/WezedYYE3)

C& operator=(C&) = default;
✓
      ✓
      ✓
      ✓
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | C& operator=(C&) = default;
✓
      ✓
      ✓
      ✓
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      ✓
      ✓
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      ✓
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
     
[link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
     
[link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗ | ✗ |  |  |  |  |  |  |  |  |  |
| [link](https://godbolt.org/z/hxc9za5KT)

C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | C& operator=(const C&&) = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
     
[link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗ | ✗ |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| [link](https://godbolt.org/z/ojM541bTM)

C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | C& operator=(const C&) const = default;
deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✓](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116162)
✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
     
[link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗ | ✗ |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| [link](https://godbolt.org/z/hchco3rcK)

C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | C& operator=(const C&) && = default;
✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✓](https://eel.is/c++draft/dcl.fct.def.default#2.1)
deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
     
[link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗ | ✗ |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| [link](https://godbolt.org/z/5P6EKrGjo)

C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | C&& operator=(const C&) && = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✗](https://eel.is/c++draft/dcl.fct.def.default#2.5)
✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
     
[link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗ | ✗ |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| [link](https://godbolt.org/z/Th33Meeez)

template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | template<class>
struct C {
  static const C& f();
  C& operator=(decltype(f()) = default;
};
✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✗](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86646)
✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
      ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✓
     
[link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗ | ✗ |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| [link](https://godbolt.org/z/s676384P9)

struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | struct M {
  M& operator=(const M&) volatile;
};
struct C {
  volatile M m;
  C& operator=(const C&) = default;
};
deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [deleted](https://eel.is/c++draft/class.copy.assign#7.3)
deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
     
[link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗ | ✗ |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| [link](https://godbolt.org/z/bdf15WjYG)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&) = default;
};
deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [deleted](https://eel.is/c++draft/dcl.fct.def.default#2.6)
deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
      deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | deleted
     
[link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗ | ✗ |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| [link](https://godbolt.org/z/KjcxqsYPb)

struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | struct A { A& operator=(A&); };
struct C {
  A a;
  C& operator=(const C&);
};
C& C::operator=(const C&) = default;
✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | [✗](https://eel.is/c++draft/dcl.fct.def.default#2.7)
✗
      ✗ | ✗
      ✗ | ✗ |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |

## Implementation experience

Arthur has implemented both § 5 Proposed wording and § 6 Proposed wording (conservative) in forks of Clang, and used them to compile both LLVM/Clang/libc++ and another large C++17 codebase. Naturally, neither patch caused any problems except in the relevant parts of Clang’s own test suite. Matthew has also grepped a large C++20 codebase and found that it does not contain any of the signatures we seek to make ill-formed in § 5 Proposed wording.

We have also searched for any real-world use of these operator overloads to assess deployment. Searching GitHub for [rvalue-ref-qualified defaulted assignment](https://github.com/search?q=lang%3Acpp+%2Foperator%3D%5C%28%5B%5E%29%5D%2B%5C%29+%26%26+%3D+default%2F+&type=code) currently yields around 1.5k results. The vast majority of these are compiler tests and test files from LLVM forks. Refining the search [to remove test files and forks of Clang and LLVM](https://github.com/search?q=lang%3Acpp+%2Foperator%3D%5C%28%5B%5E%29%5D%2B%5C%29+%26%26+%3D+default%2F+NOT+is%3Afork+-org%3Allvm++-org%3Amicrosoft+-path%3Atest+-path%3Atests&type=code) reduces the count down to 6.

Running [a similarly refined search](https://github.com/search?q=lang%3Acpp+%2Foperator%3D%5C%28%5B%5E%29%5D%2B%5C%29+%28const%7Cvolatile%29+%3D+default%2F++-path%3Atest+-path%3Atests+NOT+is%3Afork&type=code) for cv-qualified assignment yields 10 results, all of which comment out the overload in question.

Finally, we ran [a search for cv-qualified parameters in defaulted move assignment](https://github.com/search?q=lang%3Acpp+%2Foperator%3D%5C%28%28const%7Cvolatile%29%5Cs%5B%5Cw%3A%3C%3E%5D%2B%3F%26%26%5C%29+%3D+default%2F+NOT+is%3Afork+-path%3Atest&type=code) and got 36 results.

Note that these searches will undercount slightly, as GitHub search imposes a limit on the greediness of regex used. It is possible that there are additional examples of these signatures on GitHub which use a slightly different series of whitespace, which would not be counted in this search. However, we can get a very approximate measure on this by comparing against [a similarly-constrained search](https://github.com/search?q=lang%3Acpp+%2Foperator%3D%5C%28%5B%5E%29%5D%2B%5C%29+%3D+default%2F+NOT+is%3Afork+-org%3Allvm++-org%3Amicrosoft+-path%3Atest+-path%3Atests&type=code) for the "canonical" defaulted assignment operator forms, which yields 311k results. As such, we are confident that the breakage from making these signatures ill-formed would be insignificant.

## Straw poll results

Arthur O’Dwyer presented P2592R1 (not P2953, but P2952) in the EWG telecon of 2025-01-08. In addition to the vote forwarding P2952 to CWG, the following straw poll relevant to P2953 was taken. The result was interpreted as "no consensus"; but the numbers (6 for, 1 against) are still a strong signal that EWG was favorably inclined toward P2953 in general.

| **SF**
**F**
**N**
**A**
**SA**

EWG prefers this paper contains the change in P2953

(banning explicitly defaulted operator= with rvalue ref-qualifier).

[Chair: This means EWG wants to see this paper again.]
 2 
       4 
       9 
       1 
       0 | **SF**
**F**
**N**
**A**
**SA**

EWG prefers this paper contains the change in P2953

(banning explicitly defaulted operator= with rvalue ref-qualifier).

[Chair: This means EWG wants to see this paper again.]
 2 
       4 
       9 
       1 
       0 | **F**
**N**
**A**
**SA**

EWG prefers this paper contains the change in P2953

(banning explicitly defaulted operator= with rvalue ref-qualifier).

[Chair: This means EWG wants to see this paper again.]
 2 
       4 
       9 
       1 
       0 | **N**
**A**
**SA**

EWG prefers this paper contains the change in P2953

(banning explicitly defaulted operator= with rvalue ref-qualifier).

[Chair: This means EWG wants to see this paper again.]
 2 
       4 
       9 
       1 
       0 | **A**
**SA**

EWG prefers this paper contains the change in P2953

(banning explicitly defaulted operator= with rvalue ref-qualifier).

[Chair: This means EWG wants to see this paper again.]
 2 
       4 
       9 
       1 
       0 | **SA**

EWG prefers this paper contains the change in P2953

(banning explicitly defaulted operator= with rvalue ref-qualifier).

[Chair: This means EWG wants to see this paper again.]
 2 
       4 
       9 
       1 
       0 | EWG prefers this paper contains the change in P2953

(banning explicitly defaulted operator= with rvalue ref-qualifier).

[Chair: This means EWG wants to see this paper again.]
 2 
       4 
       9 
       1 
       0 | 2 
       4 
       9 
       1 
       0 | 4 
       9 
       1 
       0 | 9 
       1 
       0 | 1 
       0 | 0 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| EWG prefers this paper contains the change in P2953

(banning explicitly defaulted operator= with rvalue ref-qualifier).

[Chair: This means EWG wants to see this paper again.]
 2 
       4 
       9 
       1 
       0 | 2 
       4 
       9 
       1 
       0 | 4 
       9 
       1 
       0 | 9 
       1 
       0 | 1 
       0 | 0 |  |  |  |  |  |  |

P2952R1 went to electronic polling, [and passed](https://wiki.edg.com/bin/view/Wg21hagenberg2025/EWG-electronic-polling-P3310R5-and-P2952R1) 3–6–1–1–0. The sole voter "Against" P2952’s adoption gave as their rationale (paraphrased): "Without P2953 these changes add a corner case to the language. We should prevent that corner case by applying P2953 at the same time as P2952."

### Proposed polls

We suggest the following straw polls.

| **SF**
**F**
**N**
**A**
**SA**

EWG prefers § 6 Proposed wording (conservative), which leaves
`X& operator=(X&&) const = default;` and
`X& operator=(const X&&) = default;`
defaulted-as-deleted rather than make them ill-formed.
 – 
       — 
       — 
       — 
       — 
     
Advance P2953 to CWG for C++29.
 – 
       — 
       — 
       — 
       — | **SF**
**F**
**N**
**A**
**SA**

EWG prefers § 6 Proposed wording (conservative), which leaves
`X& operator=(X&&) const = default;` and
`X& operator=(const X&&) = default;`
defaulted-as-deleted rather than make them ill-formed.
 – 
       — 
       — 
       — 
       — 
     
Advance P2953 to CWG for C++29.
 – 
       — 
       — 
       — 
       — | **F**
**N**
**A**
**SA**

EWG prefers § 6 Proposed wording (conservative), which leaves
`X& operator=(X&&) const = default;` and
`X& operator=(const X&&) = default;`
defaulted-as-deleted rather than make them ill-formed.
 – 
       — 
       — 
       — 
       — 
     
Advance P2953 to CWG for C++29.
 – 
       — 
       — 
       — 
       — | **N**
**A**
**SA**

EWG prefers § 6 Proposed wording (conservative), which leaves
`X& operator=(X&&) const = default;` and
`X& operator=(const X&&) = default;`
defaulted-as-deleted rather than make them ill-formed.
 – 
       — 
       — 
       — 
       — 
     
Advance P2953 to CWG for C++29.
 – 
       — 
       — 
       — 
       — | **A**
**SA**

EWG prefers § 6 Proposed wording (conservative), which leaves
`X& operator=(X&&) const = default;` and
`X& operator=(const X&&) = default;`
defaulted-as-deleted rather than make them ill-formed.
 – 
       — 
       — 
       — 
       — 
     
Advance P2953 to CWG for C++29.
 – 
       — 
       — 
       — 
       — | **SA**

EWG prefers § 6 Proposed wording (conservative), which leaves
`X& operator=(X&&) const = default;` and
`X& operator=(const X&&) = default;`
defaulted-as-deleted rather than make them ill-formed.
 – 
       — 
       — 
       — 
       — 
     
Advance P2953 to CWG for C++29.
 – 
       — 
       — 
       — 
       — | EWG prefers § 6 Proposed wording (conservative), which leaves
`X& operator=(X&&) const = default;` and
`X& operator=(const X&&) = default;`
defaulted-as-deleted rather than make them ill-formed.
 – 
       — 
       — 
       — 
       — 
     
Advance P2953 to CWG for C++29.
 – 
       — 
       — 
       — 
       — | – 
       — 
       — 
       — 
       — 
     
Advance P2953 to CWG for C++29.
 – 
       — 
       — 
       — 
       — | — 
       — 
       — 
       — 
     
Advance P2953 to CWG for C++29.
 – 
       — 
       — 
       — 
       — | — 
       — 
       — 
     
Advance P2953 to CWG for C++29.
 – 
       — 
       — 
       — 
       — | — 
       — 
     
Advance P2953 to CWG for C++29.
 – 
       — 
       — 
       — 
       — | — 
     
Advance P2953 to CWG for C++29.
 – 
       — 
       — 
       — 
       — | Advance P2953 to CWG for C++29.
 – 
       — 
       — 
       — 
       — | – 
       — 
       — 
       — 
       — | — 
       — 
       — 
       — | — 
       — 
       — | — 
       — | — |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| EWG prefers § 6 Proposed wording (conservative), which leaves
`X& operator=(X&&) const = default;` and
`X& operator=(const X&&) = default;`
defaulted-as-deleted rather than make them ill-formed.
 – 
       — 
       — 
       — 
       — 
     
Advance P2953 to CWG for C++29.
 – 
       — 
       — 
       — 
       — | – 
       — 
       — 
       — 
       — 
     
Advance P2953 to CWG for C++29.
 – 
       — 
       — 
       — 
       — | — 
       — 
       — 
       — 
     
Advance P2953 to CWG for C++29.
 – 
       — 
       — 
       — 
       — | — 
       — 
       — 
     
Advance P2953 to CWG for C++29.
 – 
       — 
       — 
       — 
       — | — 
       — 
     
Advance P2953 to CWG for C++29.
 – 
       — 
       — 
       — 
       — | — 
     
Advance P2953 to CWG for C++29.
 – 
       — 
       — 
       — 
       — | Advance P2953 to CWG for C++29.
 – 
       — 
       — 
       — 
       — | – 
       — 
       — 
       — 
       — | — 
       — 
       — 
       — | — 
       — 
       — | — 
       — | — |  |  |  |  |  |  |
| Advance P2953 to CWG for C++29.
 – 
       — 
       — 
       — 
       — | – 
       — 
       — 
       — 
       — | — 
       — 
       — 
       — | — 
       — 
       — | — 
       — | — |  |  |  |  |  |  |  |  |  |  |  |  |

## Proposed wording

**DRAFTING NOTE:** The intent of this "ambitious" wording is to lock down the permissible types of defaultable member functions as much as possible, and make errors as eager as possible, *except* in the cases covered by § 2.2 "Deleted" versus "ill-formed", which we want to keep working, i.e., "defaulted as deleted."

**DRAFTING NOTE:** The only defaultable special member functions are default constructors, copy/move constructors, copy/move assignment operators, and destructors. Of these, only the assignment operators can ever be cvref-qualified.

### [dcl.fct.def.default]

**DRAFTING NOTE:** The new (2.5) ensures that `struct A { A(A&); }; struct C { A a; C(const C&) = default; };` remains defined-as-deleted, and `struct A { A(A&); }; struct C { A a; C&& operator=(const C&) = default; };` remains ill-formed (not defined-as-deleted, despite that it matches the pattern in (2.5); because it also differs in a second way).

**DRAFTING NOTE:** Basically all of this wording is concerned specifically with copy/move assignment operators, so it might be nice to move it out of [dcl.fct.def.default] and into [[class.copy.assign]](https://eel.is/c++draft/class.copy.assign). Also note that right now a difference in `noexcept`-ness is handled explicitly by [dcl.fct.def.default] for special member functions but only by omission-and-note in [[class.compare]](https://eel.is/c++draft/class.compare#default-note-1) for comparison operators.

Modify [[dcl.fct.def.default]](https://eel.is/c++draft/dcl.fct.def.default) as follows:

> 
> 1․ A function definition whose *function-body* is of the form `= default ;` is called an *explicitly-defaulted* definition.
> A function that is explicitly defaulted shall
> 
> (1.1) be a special member function or a comparison operator function ([over.binary]), and
> (1.2) not have default arguments.
> 
> 2․ An explicitly defaulted special member function `F`<sub>1</sub> is allowed to differ
> from the corresponding special member function `F`<sub>2</sub> that would have been implicitly declared, as follows:
> 
> (2.1) <ins>if `F`<sub>2</sub> is an assignment operator,</ins> <del>`F`<sub>1</sub>
> and `F`<sub>2</sub> may have differing *ref-qualifiers*</del> <ins>`F`<sub>1</sub>
> may have an lvalue *ref-qualifier*</ins>;
> (2.2) if `F`<sub>2</sub> <del>has an implicit object parameter of type “reference to C”</del> <ins>is
> an assignment operator with an implicit object parameter of type `C&`</ins>,
> `F`<sub>1</sub> may <del>be an explicit object member function whose</del> <ins>have an</ins> explicit
> object parameter <del>is</del> of type <del>(possibly
> different) “reference to C”</del> <ins>`C&`</ins>, in which case the type of `F`<sub>1</sub>
> would differ from the type of `F`<sub>2</sub> in that the type of `F`<sub>1</sub>
> has an additional parameter;
> (2.3) `F`<sub>1</sub> and `F`<sub>2</sub> may have differing exception specifications; <del>and</del>
> (2.4) if `F`<sub>2</sub> has a non-object parameter of type `const C&`, the corresponding
> non-object parameter of `F`<sub>1</sub> may be of type `C&`<ins>; and</ins>
> <ins>(2.5) if `F`<sub>2</sub> has a non-object parameter of type `C&`, the corresponding
> non-object parameter of `F`<sub>1</sub> may be of type `const C&`; in this case only,
> if `F`<sub>1</sub> is explicitly defaulted on its first declaration then it is defined as deleted;
> otherwise the program is ill-formed.</ins>
> 
> If the type of `F`<sub>1</sub> differs from the type of `F`<sub>2</sub>
> in a way other than as allowed by the preceding rules, then<del>:</del>
> <del>(2.5) if `F`<sub>1</sub> is an assignment operator, and the return type of
> `F`<sub>1</sub> differs from the return type of `F`<sub>2</sub>
> or `F`<sub>1</sub>’s non-object parameter type is not a reference, the program is ill-formed;</del>
> <del>(2.6) otherwise, if `F`<sub>1</sub> is explicitly
> defaulted on its first declaration, it is defined as deleted;</del>
> <del>(2.7) otherwise,</del> the program is ill-formed.
> 
> [...]
> 

## Proposed wording (conservative)

### [dcl.fct.def.default]

Modify [[dcl.fct.def.default]](https://eel.is/c++draft/dcl.fct.def.default) as follows:

> 
> 1․ A function definition whose *function-body* is of the form `= default ;` is called an *explicitly-defaulted* definition.
> A function that is explicitly defaulted shall
> 
> (1.1) be a special member function or a comparison operator function ([over.binary]), and
> (1.2) not have default arguments.
> 
> 2․ An explicitly defaulted special member function `F`<sub>1</sub> is allowed to differ
> from the corresponding special member function `F`<sub>2</sub> that would have been implicitly declared, as follows:
> 
> (2.1) <ins>if `F`<sub>2</sub> is an assignment operator,</ins> <del>`F`<sub>1</sub>
> and `F`<sub>2</sub> may have differing *ref-qualifiers*</del> <ins>`F`<sub>1</sub>
> may have an lvalue *ref-qualifier*</ins>;
> (2.2) if `F`<sub>2</sub> <del>has an implicit object parameter of type “reference to C”</del> <ins>is
> an assignment operator with an implicit object parameter of type `C&`</ins>,
> `F`<sub>1</sub> may <del>be an explicit object member function whose</del> <ins>have an</ins> explicit
> object parameter <del>is</del> of type <del>(possibly
> different) “reference to C”</del> <ins>`C&`</ins>, in which case the type of `F`<sub>1</sub>
> would differ from the type of `F`<sub>2</sub> in that the type of `F`<sub>1</sub>
> has an additional parameter;
> (2.3) `F`<sub>1</sub> and `F`<sub>2</sub> may have differing exception specifications; and
> (2.4) if `F`<sub>2</sub> has a non-object parameter of type `const C&`, the corresponding
> non-object parameter of `F`<sub>1</sub> may be of type `C&`.
> 
> If the type of `F`<sub>1</sub> differs from the type of `F`<sub>2</sub>
> in a way other than as allowed by the preceding rules, then:
> 
> (2.5) if <del>`F`<sub>1</sub></del> <ins>`F`<sub>2</sub></ins> is an assignment operator, and the return type of
> `F`<sub>1</sub> differs from the return type of `F`<sub>2</sub>
> or `F`<sub>1</sub>’s non-object parameter type is not a reference, the program is ill-formed;
> (2.6) otherwise, if `F`<sub>1</sub> is explicitly defaulted on its first declaration, it is defined as deleted;
> (2.7) otherwise, the program is ill-formed.
> 
> [...]
> 

## References

### Informative References

**[CWG1331]
   Daniel Krügler. [const mismatch with defaulted copy constructor](https://cplusplus.github.io/CWG/issues/1331.html). June 2011. URL: [https://cplusplus.github.io/CWG/issues/1331.html](https://cplusplus.github.io/CWG/issues/1331.html)
[CWG2586]
   Barry Revzin. [Explicit object parameter for assignment and comparison](https://cplusplus.github.io/CWG/issues/2586.html). May–July 2022. URL: [https://cplusplus.github.io/CWG/issues/2586.html](https://cplusplus.github.io/CWG/issues/2586.html)
[P0641]
   Daniel Krügler; Botond Ballo. [Resolving CWG1331: const mismatch with defaulted copy constructor](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0641r2.html). November 2017. URL: [https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0641r2.html](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0641r2.html)
[P2952]
   Arthur O'Dwyer; Matthew Taylor. [auto& operator=(X&&) = default](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2952r0.html). August 2023. URL: [https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2952r0.html](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2952r0.html)
[P3834]
   Matthew Taylor; Alex (Waffl3x); Oliver Rosten. [Defaulting the Compound Assignment Operators](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3834r1.html). October 2025. URL: [https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3834r1.html](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3834r1.html)**
