[Bug c++/94231] New: Invalid move constructor defaulted outside of class as deleted is accepted
herring at lanl dot gov
gcc-bugzilla@gcc.gnu.org
Fri Mar 20 00:08:04 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94231
Bug ID: 94231
Summary: Invalid move constructor defaulted outside of class as
deleted is accepted
Product: gcc
Version: 10.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: herring at lanl dot gov
Target Milestone: ---
GCC incorrectly accepts the following:
struct F {F(F&&)=delete;};
template<int=0>
struct M {
F f;
M();
M(const M&);
M(M&&);
};
template<int I>
M<I>::M(M&&)=default;
M<> f() {
M<> m;
return m;
}
The returned value is implicitly moved-from (although adding static_cast<M<>&&>
makes no difference), which should discover that M's move constructor is
invalid because it is defaulted after its first declaration and defined as
deleted, but simply falls back to the copy constructor instead.
If M is not a template, GCC correctly rejects, although the error messages are
a bit confused.
More information about the Gcc-bugs
mailing list