From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 83CF23858D28; Tue, 26 Apr 2022 00:31:05 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 83CF23858D28 From: "cuzdav at gmail dot com" To: gcc-bugs@gcc.gnu.org Subject: [Bug c++/105386] New: Tuple in unevaluated context is instantiated; creates reference to void Date: Tue, 26 Apr 2022 00:31:05 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: c++ X-Bugzilla-Version: 11.2.0 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: cuzdav at gmail dot com X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: bug_id short_desc product version bug_status bug_severity priority component assigned_to reporter target_milestone attachments.created Message-ID: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: gcc-bugs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-bugs mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 26 Apr 2022 00:31:05 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D105386 Bug ID: 105386 Summary: Tuple in unevaluated context is instantiated; creates reference to void Product: gcc Version: 11.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: cuzdav at gmail dot com Target Milestone: --- Created attachment 52878 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=3D52878&action=3Dedit preprocessed code Starting with g++11.2 some of meta-programming code started to fail. While instantiating a tuple in an unevaluated context, it now complains that the tuple contains a void member and it's creating a reference to void, yet= it is the same type as in the working case, just computed differently. Output of g++ -v (base) bash-4.2$ /opt/imc/gcc-11.2.0/bin/g++ -v Using built-in specs. COLLECT_GCC=3D/opt/imc/gcc-11.2.0/bin/g++ COLLECT_LTO_WRAPPER=3D/opt/imc/gcc-11.2.0/libexec/gcc/x86_64-pc-linux-gnu/1= 1.2.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: ../gcc-11.2.0/configure --prefix=3D/opt/imc/gcc-11.2.0 --enable-languages=3Dc,c++,fortran,lto --disable-multilib --with-build-time-tools=3D/opt/buildagent/work/d7a993299378ca7e/11.2.0/INST= ALLDIR//opt/imc/gcc-11.2.0/bin --enable-libstdcxx-time=3Drt Thread model: posix Supported LTO compression algorithms: zlib gcc version 11.2.0 (GCC)=20 Code appears in its entirety in attachment, but here is the main focus of t= he error: class Chunk { }; using ChunkMetaData =3D std::tuple; template ChunkMetaData chunkMetaData(MessageT&&); template class ChunkSeq { public: //////////////////////////////////////// using good_type =3D ChunkMetaData; #ifdef SHOWBUG using bad_type =3D decltype(chunkMetaData(std::declval())); static_assert(std::is_same_v); using MetaData =3D bad_type; #else using MetaData =3D good_type; #endif //////////////////////////////////////// In gcc10, when SHOWBUG is defined, it still builds. The static assertion passes. With gcc11 and 12, it fails, upset about a tuple creating a refere= nce to void. Live example: https://godbolt.org/z/4Wq3s936W Errors: In file included from krx/feed/sr10/foo.cpp:1: /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple: In instantiation of =E2=80=98struct std::_Head_base<2, void, false>=E2=80= =99: /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:407:12: required from =E2=80=98struct std::_Tuple_impl<2, void>=E2=80=99 /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:244:12: required from =E2=80=98struct std::_Tuple_impl<0, void, Chunk, void>=E2= =80=99 /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:599:11: required from =E2=80=98class std::tuple=E2=80=99 krx/feed/sr10/foo.cpp:171:42: [ skipping 2 instantiation contexts, use -ftemplate-backtrace-limit=3D0 to disable ] krx/feed/sr10/foo.cpp:111:57: required from =E2=80=98constexpr const bool InvertPredicate >::value >=E2=80= =99 krx/feed/sr10/foo.cpp:122:11: required from =E2=80=98struct RemoveIfImpl >, std::tuple, PartialField<1> > >=E2=80=99 krx/feed/sr10/foo.cpp:235:7: required by substitution of =E2=80=98templat= e using PartialStartField =3D typename KeepIf, typename RemoveIfImpl >, std::tuple, PartialField<1> > >::type>::type [with T =3D Ch= unk]=E2=80=99 krx/feed/sr10/foo.cpp:240:47: required from =E2=80=98constexpr const bool HasPartialBegin::value=E2=80=99 krx/feed/sr10/foo.cpp:111:57: required from =E2=80=98constexpr const bool InvertPredicate::value=E2=80=99 krx/feed/sr10/foo.cpp:122:11: required from =E2=80=98struct RemoveIfImpl, std::tuple >=E2=80=99 krx/feed/sr10/foo.cpp:247:6: required from here /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:182:17: error: forming reference to void 182 | constexpr _Head_base(const _Head& __h) | ^~~~~~~~~~ /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:219:7: error: forming reference to void 219 | _M_head(_Head_base& __b) noexcept { return __b._M_head_impl; } | ^~~~~~~ /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:222:7: error: forming reference to void 222 | _M_head(const _Head_base& __b) noexcept { return __b._M_head_impl; } | ^~~~~~~ /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:224:13: error: =E2=80=98std::_Head_base<_Idx, _Head, false>::_M_head_impl=E2=80=99 = has incomplete type 224 | _Head _M_head_impl; | ^~~~~~~~~~~~ /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:224:13: error: invalid use of =E2=80=98void=E2=80=99 In file included from krx/feed/sr10/foo.cpp:1: /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple: In instantiation of =E2=80=98struct std::_Tuple_impl<2, void>=E2=80=99: /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:244:12: recursively required from =E2=80=98struct std::_Tuple_impl<1, Chunk, void= >=E2=80=99 /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:244:12: required from =E2=80=98struct std::_Tuple_impl<0, void, Chunk, void>=E2= =80=99 /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:599:11: required from =E2=80=98class std::tuple=E2=80=99 krx/feed/sr10/foo.cpp:171:42: required from =E2=80=98class ChunkSeq=E2=80=99 krx/feed/sr10/foo.cpp:231:35: required from =E2=80=98constexpr const bool FieldIsPartialBegin::value >=E2=80=99 krx/feed/sr10/foo.cpp:111:57: required from =E2=80=98constexpr const bool InvertPredicate >::value >=E2=80= =99 krx/feed/sr10/foo.cpp:122:11: required from =E2=80=98struct RemoveIfImpl >, std::tuple, PartialField<1> > >=E2=80=99 krx/feed/sr10/foo.cpp:235:7: required by substitution of =E2=80=98templat= e using PartialStartField =3D typename KeepIf, typename RemoveIfImpl >, std::tuple, PartialField<1> > >::type>::type [with T =3D Ch= unk]=E2=80=99 krx/feed/sr10/foo.cpp:240:47: required from =E2=80=98constexpr const bool HasPartialBegin::value=E2=80=99 krx/feed/sr10/foo.cpp:111:57: required from =E2=80=98constexpr const bool InvertPredicate::value=E2=80=99 krx/feed/sr10/foo.cpp:122:11: required from =E2=80=98struct RemoveIfImpl, std::tuple >=E2=80=99 krx/feed/sr10/foo.cpp:247:6: required from here /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:415:7: error: forming reference to void 415 | _M_head(_Tuple_impl& __t) noexcept { return _Base::_M_head(__= t); } | ^~~~~~~ /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:418:7: error: forming reference to void 418 | _M_head(const _Tuple_impl& __t) noexcept { return _Base::_M_head(__t); } | ^~~~~~~ /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:425:7: error: forming reference to void 425 | _Tuple_impl(const _Head& __head) | ^~~~~~~~~~~ /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:466:9: error: forming reference to void 466 | _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, | ^~~~~~~~~~~ /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple: In instantiation of =E2=80=98struct std::_Tuple_impl<1, Chunk, void>=E2=80= =99: /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:244:12: required from =E2=80=98struct std::_Tuple_impl<0, void, Chunk, void>=E2= =80=99 /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:599:11: required from =E2=80=98class std::tuple=E2=80=99 krx/feed/sr10/foo.cpp:171:42: required from =E2=80=98class ChunkSeq=E2=80=99 krx/feed/sr10/foo.cpp:231:35: required from =E2=80=98constexpr const bool FieldIsPartialBegin::value >=E2=80=99 krx/feed/sr10/foo.cpp:111:57: required from =E2=80=98constexpr const bool InvertPredicate >::value >=E2=80= =99 krx/feed/sr10/foo.cpp:122:11: required from =E2=80=98struct RemoveIfImpl >, std::tuple, PartialField<1> > >=E2=80=99 krx/feed/sr10/foo.cpp:235:7: required by substitution of =E2=80=98templat= e using PartialStartField =3D typename KeepIf, typename RemoveIfImpl >, std::tuple, PartialField<1> > >::type>::type [with T =3D Ch= unk]=E2=80=99 krx/feed/sr10/foo.cpp:240:47: required from =E2=80=98constexpr const bool HasPartialBegin::value=E2=80=99 krx/feed/sr10/foo.cpp:111:57: required from =E2=80=98constexpr const bool InvertPredicate::value=E2=80=99 krx/feed/sr10/foo.cpp:122:11: required from =E2=80=98struct RemoveIfImpl, std::tuple >=E2=80=99 krx/feed/sr10/foo.cpp:247:6: required from here /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:269:7: error: forming reference to void 269 | _Tuple_impl(const _Head& __head, const _Tail&... __tail) | ^~~~~~~~~~~ /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:319:9: error: forming reference to void 319 | _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, | ^~~~~~~~~~~ In file included from krx/feed/sr10/foo.cpp:1: /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple: In instantiation of =E2=80=98struct std::_Head_base<0, void, false>=E2=80= =99: /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:244:12: required from =E2=80=98struct std::_Tuple_impl<0, void, Chunk, void>=E2= =80=99 /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:599:11: required from =E2=80=98class std::tuple=E2=80=99 krx/feed/sr10/foo.cpp:171:42: required from =E2=80=98class ChunkSeq=E2=80=99 krx/feed/sr10/foo.cpp:231:35: required from =E2=80=98constexpr const bool FieldIsPartialBegin::value >=E2=80=99 krx/feed/sr10/foo.cpp:111:57: required from =E2=80=98constexpr const bool InvertPredicate >::value >=E2=80= =99 krx/feed/sr10/foo.cpp:122:11: required from =E2=80=98struct RemoveIfImpl >, std::tuple, PartialField<1> > >=E2=80=99 krx/feed/sr10/foo.cpp:235:7: required by substitution of =E2=80=98templat= e using PartialStartField =3D typename KeepIf, typename RemoveIfImpl >, std::tuple, PartialField<1> > >::type>::type [with T =3D Ch= unk]=E2=80=99 krx/feed/sr10/foo.cpp:240:47: required from =E2=80=98constexpr const bool HasPartialBegin::value=E2=80=99 krx/feed/sr10/foo.cpp:111:57: required from =E2=80=98constexpr const bool InvertPredicate::value=E2=80=99 krx/feed/sr10/foo.cpp:122:11: required from =E2=80=98struct RemoveIfImpl, std::tuple >=E2=80=99 krx/feed/sr10/foo.cpp:247:6: required from here /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:182:17: error: forming reference to void 182 | constexpr _Head_base(const _Head& __h) | ^~~~~~~~~~ /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:219:7: error: forming reference to void 219 | _M_head(_Head_base& __b) noexcept { return __b._M_head_impl; } | ^~~~~~~ /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:222:7: error: forming reference to void 222 | _M_head(const _Head_base& __b) noexcept { return __b._M_head_impl; } | ^~~~~~~ /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:224:13: error: =E2=80=98std::_Head_base<_Idx, _Head, false>::_M_head_impl=E2=80=99 = has incomplete type 224 | _Head _M_head_impl; | ^~~~~~~~~~~~ /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:224:13: error: invalid use of =E2=80=98void=E2=80=99 In file included from krx/feed/sr10/foo.cpp:1: /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple: In instantiation of =E2=80=98struct std::_Tuple_impl<0, void, Chunk, void>= =E2=80=99: /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:599:11: required from =E2=80=98class std::tuple=E2=80=99 krx/feed/sr10/foo.cpp:171:42: required from =E2=80=98class ChunkSeq=E2=80=99 krx/feed/sr10/foo.cpp:231:35: required from =E2=80=98constexpr const bool FieldIsPartialBegin::value >=E2=80=99 krx/feed/sr10/foo.cpp:111:57: required from =E2=80=98constexpr const bool InvertPredicate >::value >=E2=80= =99 krx/feed/sr10/foo.cpp:122:11: required from =E2=80=98struct RemoveIfImpl >, std::tuple, PartialField<1> > >=E2=80=99 krx/feed/sr10/foo.cpp:235:7: required by substitution of =E2=80=98templat= e using PartialStartField =3D typename KeepIf, typename RemoveIfImpl >, std::tuple, PartialField<1> > >::type>::type [with T =3D Ch= unk]=E2=80=99 krx/feed/sr10/foo.cpp:240:47: required from =E2=80=98constexpr const bool HasPartialBegin::value=E2=80=99 krx/feed/sr10/foo.cpp:111:57: required from =E2=80=98constexpr const bool InvertPredicate::value=E2=80=99 krx/feed/sr10/foo.cpp:122:11: required from =E2=80=98struct RemoveIfImpl, std::tuple >=E2=80=99 krx/feed/sr10/foo.cpp:247:6: required from here /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:254:7: error: forming reference to void 254 | _M_head(_Tuple_impl& __t) noexcept { return _Base::_M_head(__= t); } | ^~~~~~~ /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:257:7: error: forming reference to void 257 | _M_head(const _Tuple_impl& __t) noexcept { return _Base::_M_head(__t); } | ^~~~~~~ /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:269:7: error: forming reference to void 269 | _Tuple_impl(const _Head& __head, const _Tail&... __tail) | ^~~~~~~~~~~ /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:319:9: error: forming reference to void 319 | _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, | ^~~~~~~~~~~ /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple: In instantiation of =E2=80=98class std::tuple=E2=80=99: krx/feed/sr10/foo.cpp:171:42: required from =E2=80=98class ChunkSeq=E2=80=99 krx/feed/sr10/foo.cpp:231:35: required from =E2=80=98constexpr const bool FieldIsPartialBegin::value >=E2=80=99 krx/feed/sr10/foo.cpp:111:57: required from =E2=80=98constexpr const bool InvertPredicate >::value >=E2=80= =99 krx/feed/sr10/foo.cpp:122:11: required from =E2=80=98struct RemoveIfImpl >, std::tuple, PartialField<1> > >=E2=80=99 krx/feed/sr10/foo.cpp:235:7: required by substitution of =E2=80=98templat= e using PartialStartField =3D typename KeepIf, typename RemoveIfImpl >, std::tuple, PartialField<1> > >::type>::type [with T =3D Ch= unk]=E2=80=99 krx/feed/sr10/foo.cpp:240:47: required from =E2=80=98constexpr const bool HasPartialBegin::value=E2=80=99 krx/feed/sr10/foo.cpp:111:57: required from =E2=80=98constexpr const bool InvertPredicate::value=E2=80=99 krx/feed/sr10/foo.cpp:122:11: required from =E2=80=98struct RemoveIfImpl, std::tuple >=E2=80=99 krx/feed/sr10/foo.cpp:247:6: required from here /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:621:72: error: forming reference to void 621 | _TCC<_Cond>::template __is_implicitly_constructible<_Args...>(), |=20=20=20=20=20=20=20=20=20=20 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~ /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:627:72: error: forming reference to void 627 | _TCC<_Cond>::template __is_explicitly_constructible<_Args...>(), |=20=20=20=20=20=20=20=20=20=20 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~ /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:621:72: error: forming reference to void 621 | _TCC<_Cond>::template __is_implicitly_constructible<_Args...>(), |=20=20=20=20=20=20=20=20=20=20 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~ /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:627:72: error: forming reference to void 627 | _TCC<_Cond>::template __is_explicitly_constructible<_Args...>(), |=20=20=20=20=20=20=20=20=20=20 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~ In file included from krx/feed/sr10/foo.cpp:1: /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:888:71: error: forming reference to void 888 | operator=3D(typename conditional<__assignable(), |=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~ /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:888:71: error: no matching function for call to =E2=80=98std::tuple::()=E2=80=99 In file included from krx/feed/sr10/foo.cpp:1: /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:633:9: note: candidate: =E2=80=98template static constexpr std::__enable_if_t<(sizeof... (_UElements) =3D=3D sizeof... (_Elements)), b= ool> std::tuple<_Elements>::__assignable() [with _UElements =3D {_UElements ...}; _Elements =3D {void, Chunk, void}]=E2=80=99 633 | __assignable() | ^~~~~~~~~~~~ /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:633:9: note: template argument deduction/substitution failed: /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple: In instantiation of =E2=80=98static constexpr std::__enable_if_t<(sizeof... (_UElements) =3D=3D sizeof... (_Elements)), bool> std::tuple<_Elements>::__assignable() [with _UElements =3D {void, Chunk, vo= id}; _Elements =3D {void, Chunk, void}; std::__enable_if_t<(sizeof... (_UElement= s) =3D=3D sizeof... (_Elements)), bool> =3D bool]=E2=80=99: /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:899:64: required from =E2=80=98class std::tuple=E2=80=99 krx/feed/sr10/foo.cpp:171:42: required from =E2=80=98class ChunkSeq=E2=80=99 krx/feed/sr10/foo.cpp:231:35: required from =E2=80=98constexpr const bool FieldIsPartialBegin::value >=E2=80=99 krx/feed/sr10/foo.cpp:111:57: required from =E2=80=98constexpr const bool InvertPredicate >::value >=E2=80= =99 krx/feed/sr10/foo.cpp:122:11: required from =E2=80=98struct RemoveIfImpl >, std::tuple, PartialField<1> > >=E2=80=99 krx/feed/sr10/foo.cpp:235:7: required by substitution of =E2=80=98templat= e using PartialStartField =3D typename KeepIf, typename RemoveIfImpl >, std::tuple, PartialField<1> > >::type>::type [with T =3D Ch= unk]=E2=80=99 krx/feed/sr10/foo.cpp:240:47: required from =E2=80=98constexpr const bool HasPartialBegin::value=E2=80=99 krx/feed/sr10/foo.cpp:111:57: required from =E2=80=98constexpr const bool InvertPredicate::value=E2=80=99 krx/feed/sr10/foo.cpp:122:11: required from =E2=80=98struct RemoveIfImpl, std::tuple >=E2=80=99 krx/feed/sr10/foo.cpp:247:6: required from here /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:634:68: error: forming reference to void 634 | { return __and_...>::value; } |=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 ^~~~~ In file included from krx/feed/sr10/foo.cpp:1: /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple: In instantiation of =E2=80=98class std::tuple=E2=80=99: krx/feed/sr10/foo.cpp:171:42: required from =E2=80=98class ChunkSeq=E2=80=99 krx/feed/sr10/foo.cpp:231:35: required from =E2=80=98constexpr const bool FieldIsPartialBegin::value >=E2=80=99 krx/feed/sr10/foo.cpp:111:57: required from =E2=80=98constexpr const bool InvertPredicate >::value >=E2=80= =99 krx/feed/sr10/foo.cpp:122:11: required from =E2=80=98struct RemoveIfImpl >, std::tuple, PartialField<1> > >=E2=80=99 krx/feed/sr10/foo.cpp:235:7: required by substitution of =E2=80=98templat= e using PartialStartField =3D typename KeepIf, typename RemoveIfImpl >, std::tuple, PartialField<1> > >::type>::type [with T =3D Ch= unk]=E2=80=99 krx/feed/sr10/foo.cpp:240:47: required from =E2=80=98constexpr const bool HasPartialBegin::value=E2=80=99 krx/feed/sr10/foo.cpp:111:57: required from =E2=80=98constexpr const bool InvertPredicate::value=E2=80=99 krx/feed/sr10/foo.cpp:122:11: required from =E2=80=98struct RemoveIfImpl, std::tuple >=E2=80=99 krx/feed/sr10/foo.cpp:247:6: required from here /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:899:64: in =E2=80=98constexpr=E2=80=99 expansion of =E2=80=98std::tuple::__assignable()=E2=80=99 /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:899:7: error: =E2=80=98constexpr=E2=80=99 call flows off the end of the function 899 | operator=3D(typename conditional<__assignable<_Elements...>(), | ^~~~~~~~ /opt/imc/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../include/= c++/11.2.0/tuple:899:64: note: in template argument for type =E2=80=98bool=E2=80=99 899 | operator=3D(typename conditional<__assignable<_Elements...>(), | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~=