Opened 8 months ago

Last modified 4 weeks ago

#68055 new defect

codeblocks fails to build with gcc12 on 10.6 when build as ppc: error: static assertion failed: comparison object must be invocable as const

Reported by: barracuda156 Owned by:
Priority: Normal Milestone:
Component: ports Version: 2.8.1
Keywords: snowleopard ppc Cc:
Port: codeblocks

Description

:info:build make[3]: Entering directory `/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_codeblocks/codeblocks/work/codeblocks-20.03/src/plugins/openfileslist'
:info:build depbase=`echo openfileslistplugin.lo | sed 's|[^/]*$|.deps/&|;s|\.lo$||'`;\
:info:build 	/bin/sh ../../../libtool  --tag=CXX   --mode=compile /opt/local/bin/g++-mp-12 -DHAVE_CONFIG_H -I. -I../../../src/include  -I/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxGTK/3.0/lib/wx/include/gtk3-unicode-3.0 -I/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxGTK/3.0/include/wx-3.0 -D_FILE_OFFSET_BITS=64 -DWXUSINGDLL -D__WXGTK__  -I../../../src/include -I../../../src/sdk/wxscintilla/include -DCB_AUTOCONF -I/opt/local/libexec/boost/1.76/include -I/opt/local/include -DCB_PRECOMP -DPIC   -pipe -I/opt/local/libexec/boost/1.76/include -Os -D_GLIBCXX_USE_CXX11_ABI=0 -arch ppc -Winvalid-pch -fPIC -fexceptions -MT openfileslistplugin.lo -MD -MP -MF $depbase.Tpo -c -o openfileslistplugin.lo openfileslistplugin.cpp &&\
:info:build 	mv -f $depbase.Tpo $depbase.Plo
:info:build PWD=`pwd` cd . && zip /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_codeblocks/codeblocks/work/codeblocks-20.03/src/plugins/openfileslist/openfileslist.zip manifest.xml > /dev/null
:info:build libtool: compile:  /opt/local/bin/g++-mp-12 -DHAVE_CONFIG_H -I. -I../../../src/include -I/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxGTK/3.0/lib/wx/include/gtk3-unicode-3.0 -I/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxGTK/3.0/include/wx-3.0 -D_FILE_OFFSET_BITS=64 -DWXUSINGDLL -D__WXGTK__ -I../../../src/include -I../../../src/sdk/wxscintilla/include -DCB_AUTOCONF -I/opt/local/libexec/boost/1.76/include -I/opt/local/include -DCB_PRECOMP -DPIC -pipe -I/opt/local/libexec/boost/1.76/include -Os -D_GLIBCXX_USE_CXX11_ABI=0 -arch ppc -Winvalid-pch -fPIC -fexceptions -MT openfileslistplugin.lo -MD -MP -MF .deps/openfileslistplugin.Tpo -c openfileslistplugin.cpp  -fno-common -DPIC -o .libs/openfileslistplugin.o
:info:build In file included from /opt/local/include/gcc12/c++/map:60,
:info:build                  from ./manager.h:9,
:info:build                  from ./cbplugin.h:17,
:info:build                  from ./sdk_common.h:110,
:info:build                  from ./sdk_precomp.h:13,
:info:build                  from ./sdk.h:17:
:info:build /opt/local/include/gcc12/c++/bits/stl_tree.h: In instantiation of 'static const _Key& std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_S_key(_Const_Link_type) [with _Key = ProjectFile*; _Val = ProjectFile*; _KeyOfValue = std::_Identity<ProjectFile*>; _Compare = TargetFilesData::compareLess; _Alloc = std::allocator<ProjectFile*>; _Const_Link_type = const std::_Rb_tree_node<ProjectFile*>*]':
:info:build /opt/local/include/gcc12/c++/bits/stl_tree.h:2119:47:   required from 'std::pair<std::_Rb_tree_node_base*, std::_Rb_tree_node_base*> std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_get_insert_unique_pos(const key_type&) [with _Key = ProjectFile*; _Val = ProjectFile*; _KeyOfValue = std::_Identity<ProjectFile*>; _Compare = TargetFilesData::compareLess; _Alloc = std::allocator<ProjectFile*>; key_type = ProjectFile*]'
:info:build /opt/local/include/gcc12/c++/bits/stl_tree.h:2172:4:   required from 'std::pair<std::_Rb_tree_iterator<_Val>, bool> std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_insert_unique(_Arg&&) [with _Arg = ProjectFile* const&; _Key = ProjectFile*; _Val = ProjectFile*; _KeyOfValue = std::_Identity<ProjectFile*>; _Compare = TargetFilesData::compareLess; _Alloc = std::allocator<ProjectFile*>]'
:info:build /opt/local/include/gcc12/c++/bits/stl_set.h:512:25:   required from 'std::pair<typename std::_Rb_tree<_Key, _Key, std::_Identity<_Tp>, _Compare, typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<_Key>::other>::const_iterator, bool> std::set<_Key, _Compare, _Alloc>::insert(const value_type&) [with _Key = ProjectFile*; _Compare = TargetFilesData::compareLess; _Alloc = std::allocator<ProjectFile*>; typename std::_Rb_tree<_Key, _Key, std::_Identity<_Tp>, _Compare, typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<_Key>::other>::const_iterator = std::_Rb_tree<ProjectFile*, ProjectFile*, std::_Identity<ProjectFile*>, TargetFilesData::compareLess, std::allocator<ProjectFile*> >::const_iterator; typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<_Key>::other = std::allocator<ProjectFile*>; typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<_Key> = __gnu_cxx::__alloc_traits<std::allocator<ProjectFile*>, ProjectFile*>::rebind<ProjectFile*>; typename _Alloc::value_type = ProjectFile*; value_type = ProjectFile*]'
:info:build openfileslistplugin.cpp:440:57:   required from here
:info:build /opt/local/include/gcc12/c++/bits/stl_tree.h:772:15: error: static assertion failed: comparison object must be invocable as const
:info:build   772 |               is_invocable_v<const _Compare&, const _Key&, const _Key&>,
:info:build       |               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:info:build /opt/local/include/gcc12/c++/bits/stl_tree.h:772:15: note: 'std::is_invocable_v<const TargetFilesData::compareLess&, ProjectFile* const&, ProjectFile* const&>' evaluates to false
:info:build make[3]: *** [openfileslistplugin.lo] Error 1

Change History (8)

comment:1 Changed 8 months ago by kencu (Ken)

Summary: codeblocks fails to build with GCC: error: static assertion failed: comparison object must be invocable as constcodeblocks fails to build with gcc12 on 10.6 when build as ppc: error: static assertion failed: comparison object must be invocable as const

comment:2 Changed 8 months ago by kencu (Ken)

Keywords: snowleopard ppc added

I’m not likely to work on this, but you might try codeblocks-devel as it has several years of new commits in it.

comment:3 Changed 8 months ago by kencu (Ken)

relevant:

https://stackoverflow.com/questions/51235355/comparison-object-being-invocable-as-const

I don’t see a c++ standard being set on the build line, and in the absence of one being set gcc-12 will default to gnu++17, which apparently will trigger this error.

It’s probably already fixed in codeblocks-devel, but you’d have to try it to see.

comment:4 in reply to:  3 Changed 5 weeks ago by barracuda156

Replying to kencu:

relevant:

https://stackoverflow.com/questions/51235355/comparison-object-being-invocable-as-const

I don’t see a c++ standard being set on the build line, and in the absence of one being set gcc-12 will default to gnu++17, which apparently will trigger this error.

It’s probably already fixed in codeblocks-devel, but you’d have to try it to see.

Thank you, I will try it.

  1. S. Same error with gcc13, though nothing to be surprised about.

comment:5 in reply to:  3 Changed 5 weeks ago by barracuda156

Replying to kencu:

Yeah, codeblocks-devel installs fine from existing portfile. However, I get this error now:

36-100% /Applications/MacPorts/CodeBlocks.app/Contents/MacOS/CodeBlocks 
Fatal Error: Mismatch between the program and library build versions detected.
The library used 3.0 (wchar_t,compiler with C++ ABI 1002,wx containers,compatible with 2.8),
and your program used 3.0 (wchar_t,compiler with C++ ABI 1018,wx containers,compatible with 2.8).

I have seen it earlier with amule, where I had to fallback to gcc-4.2. Here that does not work, we need C++11. What is the right way to address this?

comment:6 Changed 4 weeks ago by barracuda156

By the way, this wxWidgets pain seems to be but another outcome of mixing two libstdc++. Which is why no one is having these on systems with Clangs.

comment:7 Changed 4 weeks ago by kencu (Ken)

it might link properly if you forced the build of codeblocks-devel to use the older GXX ABI.

You would do this by setting this:

configure.cxxflags-append -fabi-version=2

This has some potential downsides (the newer ABI has fixes and enhancements), but ... possibly worth a try.

Alternatively, you could probably rebuild wxWidgets using a newer gcc, which it would appear defaults to a newer GXX ABI. However, at that point, you'd be needing to always use that newer gcc to build things against wxWidgets, which might be just fine.

comment:8 Changed 4 weeks ago by kencu (Ken)

Here is some information on GCC's CXX ABI dialects:

https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html

Note: See TracTickets for help on using tickets.