-
Notifications
You must be signed in to change notification settings - Fork 13k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
defaulted destructor makes defaulted copy constructor non-constexpr #37491
Comments
duplicate of #26063 ? |
Still persists in Clang 13 with constexpr constructors. This issue doesn't appear in GCC 11.2 and Clang 13 with -std=c++17, but it only appears when the flag Below is the sample code: struct Foo {
constexpr Foo(const Foo&) noexcept = default;
constexpr Foo(Foo&&) noexcept = default;
constexpr auto operator=(const Foo&) noexcept -> Foo& = default;
constexpr auto operator=(Foo&&) noexcept -> Foo& = default;
}; with the following errors:
Live demo: https://godbolt.org/z/6Mz6K3PMf As shown above, the warning states that both assignment operators are not constexpr even though they are already declared constexpr, which is contradictory. |
The original issue was a duplicate.
No. Lack of the constexpr default constructor was critical before C++23, see N4868 [basic.type]/10.5.2 and P2448R2. Clang was correct on rejecting Now Clang says
|
@llvm/issue-subscribers-clang-frontend Author: Marshall Clow (mclow)
| | |
| --- | --- |
| Bugzilla Link | [38143](https://llvm.org/bz38143) |
| Version | trunk |
| OS | All |
| CC | @DougGregor,@marehr,@zygoloid |
Extended DescriptionConsider this code: class span {
public:
using pointer = const int *;
constexpr span() : __data{nullptr} {}
constexpr span (const span&) noexcept = default;
constexpr span& operator=(const span&) noexcept = default;
~span() noexcept = default;
constexpr pointer data() const noexcept { return __data; }
private:
pointer __data;
}; When compiled with a recent clang [clang version 7.0.0 (trunk 336548)], (
then it compiles w/o error. However, I believe that it should compile w/o error in both cases. |
Extended Description
Consider this code:
When compiled with a recent clang [clang version 7.0.0 (trunk 336548)], (
-std=c++2a
) it gives an error:then it compiles w/o error.
However, I believe that it should compile w/o error in both cases.
The text was updated successfully, but these errors were encountered: