Declaring defaulted assignment operator as constexpr: which compiler is right? : <p>Consider</p>

<pre><code>struct A1 {
    constexpr A1&amp; operator=(const A1&amp;) = default;
    ~A1() {}
};
struct A2 {
    constexpr A2&amp; operator=(const A2&amp;) = default;
    ~A2() = default;
};
struct A3 {
    ~A3() = default;
    constexpr A3&amp; operator=(const A3&amp;) = default;
};
</code></pre>

<p>GCC and MSVC accept all three structs. Clang rejects <code>A1</code> and <code>A2</code> (but accepts <code>A3</code>), with the following error message:</p>

<blockquote>
<pre><code>&lt;source&gt;:2:5: error: defaulted definition of copy assignment operator is not constexpr
    constexpr A1&amp; operator=(const A1&amp;) = default;
    ^
&lt;source&gt;:6:5: error: defaulted definition of copy assignment operator is not constexpr
    constexpr A2&amp; operator=(const A2&amp;) = default;
    ^
2 errors generated.
</code></pre>
</blockquote>

<p>(<a href="https://godbolt.org/z/ZBUrMJ" rel="noreferrer">live demo</a>)</p>

<p>Which compiler is correct, and why?</p>
