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.