V-ille reports the following snippet is incorrectly rejected: struct Defaulted { Defaulted(Defaulted&&) noexcept(false) = default; int mem; }; with the following error: prog.cc:2:3: error: exception specification of explicitly defaulted move constructor does not match the calculated one Defaulted(Defaulted&&) noexcept(false) = default; The move constructor should not be ill-formed, but deleted. This is CWG1778, exception-specification in explicitly-defaulted functions.
It seems that this was "fixed" some time between clang 8.0.0 and 9.0.0. Agustín's example now compiles: https://godbolt.org/z/7h5TuM However, the handling of non-matching exception specifiers is still not correct. Non-matching exception specifiers should cause the function to be defined as deleted, which Clang fails to do: https://godbolt.org/z/qM3aRP.
The normative rule has changed. Now non-matching exception specifications do not cause the function to be deleted. See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1286r2.html.
Right, I wasn't aware of that change. Then I think we can close this issue.