public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug c++/108683] New: Move Occurs when initializing an aggregate base
@ 2023-02-06 13:08 davidledger at live dot com.au
2023-02-06 14:20 ` [Bug c++/108683] " redi at gcc dot gnu.org
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: davidledger at live dot com.au @ 2023-02-06 13:08 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108683
Bug ID: 108683
Summary: Move Occurs when initializing an aggregate base
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: davidledger at live dot com.au
Target Milestone: ---
```CPP
struct Bar
{
Bar() = delete;
Bar(Bar const &) = delete;
Bar& operator=(Bar const&) = delete;
Bar(Bar&&) = delete;
Bar& operator=(Bar&&) = delete;
explicit Bar(int value) : m_value(value) {}
int m_value;
};
namespace A
{
struct Foo : Bar{}; // this is the only difference.
Bar MakeBar()
{
return Bar(10);
}
}
namespace B
{
struct Foo
{
Bar bar; // this is the only difference.
};
Bar MakeBar()
{
return Bar(10);
}
}
int main()
{
A::Foo foo{ A::MakeBar() };
B::Foo bar{ B::MakeBar() };
}
```
The above example, while failing similarly in clang and GCC. Compiles without
issue on MSVC.
As of C++17:
> An aggregate class or array may include non-aggregate public bases (since C++17), members, or elements, which are initialized as described above (e.g. copy-initialization from the corresponding initializer clause).
cppreference.
So we have an aggregate here. When using GCC, the following error is presented:
```
<source>: In function 'int main()':
<source>:38:30: error: use of deleted function 'Bar::Bar(Bar&&)'
38 | A::Foo foo{ A::MakeBar() };
| ^
<source>:6:5: note: declared here
6 | Bar(Bar&&) = delete;
| ^~~
Compiler returned: 1
```
I believe this should compile without requiring a move constructor of the base
type.
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug c++/108683] Move Occurs when initializing an aggregate base 2023-02-06 13:08 [Bug c++/108683] New: Move Occurs when initializing an aggregate base davidledger at live dot com.au @ 2023-02-06 14:20 ` redi at gcc dot gnu.org 2023-02-06 15:10 ` davidledger at live dot com.au 2023-02-06 15:38 ` redi at gcc dot gnu.org 2 siblings, 0 replies; 4+ messages in thread From: redi at gcc dot gnu.org @ 2023-02-06 14:20 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108683 Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |DUPLICATE Status|UNCONFIRMED |RESOLVED --- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- Mandatory copy elision isn't possible into an empty base class, so a move needs to happen. See PR 98995 *** This bug has been marked as a duplicate of bug 98995 *** ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug c++/108683] Move Occurs when initializing an aggregate base 2023-02-06 13:08 [Bug c++/108683] New: Move Occurs when initializing an aggregate base davidledger at live dot com.au 2023-02-06 14:20 ` [Bug c++/108683] " redi at gcc dot gnu.org @ 2023-02-06 15:10 ` davidledger at live dot com.au 2023-02-06 15:38 ` redi at gcc dot gnu.org 2 siblings, 0 replies; 4+ messages in thread From: davidledger at live dot com.au @ 2023-02-06 15:10 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108683 --- Comment #2 from David Ledger <davidledger at live dot com.au> --- Bar stores an int, it isn't empty. ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug c++/108683] Move Occurs when initializing an aggregate base 2023-02-06 13:08 [Bug c++/108683] New: Move Occurs when initializing an aggregate base davidledger at live dot com.au 2023-02-06 14:20 ` [Bug c++/108683] " redi at gcc dot gnu.org 2023-02-06 15:10 ` davidledger at live dot com.au @ 2023-02-06 15:38 ` redi at gcc dot gnu.org 2 siblings, 0 replies; 4+ messages in thread From: redi at gcc dot gnu.org @ 2023-02-06 15:38 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108683 --- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> --- Pretend I didn't say empty then :) I think the problem is for any potentially overlapping subobject, which includes bases. Empty or not. ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-02-06 15:38 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2023-02-06 13:08 [Bug c++/108683] New: Move Occurs when initializing an aggregate base davidledger at live dot com.au 2023-02-06 14:20 ` [Bug c++/108683] " redi at gcc dot gnu.org 2023-02-06 15:10 ` davidledger at live dot com.au 2023-02-06 15:38 ` redi at gcc dot gnu.org
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).