https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84782

--- Comment #5 from Raphael Kubo da Costa <raphael.kubo.da.costa at intel dot 
com> ---
Sorry if my comment was too coarse-grained. My hypothesis that this is a
duplicate comes from playback_image_provider.ii looking like Chromium's
playback_image_provider.cc, which was failing to build with GCC when a copy
constructor was not defined inline (just like the union from bug 70431).

My reduced testcase from the original Chromium code (without templates) looks
like this:

-----
struct S1 {
  S1& operator=(const S1&) = default;
  S1& operator=(S1&&) = default;
};

struct S2 {
  S2() = default;
  S2(const S2&);
  S1 m;
};

S2::S2(const S2&) = default;
-----

x.cc:12:1: note: ‘S2::S2(const S2&)’ is implicitly deleted because the default
definition would be ill-formed:
 S2::S2(const S2&) = default;
 ^~
x.cc:12:1: error: use of deleted function ‘constexpr S1::S1(const S1&)’
x.cc:1:8: note: ‘constexpr S1::S1(const S1&)’ is implicitly declared as deleted
because ‘S1’ declares a move constructor or move assignment operator
 struct S1 {
        ^~

The error goes away if S2's copy constructor is declared inline.

Reply via email to