View Issue Details [ Jump to Notes ] | [ Issue History ] [ Print ] | ||||||||
ID | Project | Category | View Status | Date Submitted | Last Update | ||||
---|---|---|---|---|---|---|---|---|---|
0006412 | Spring engine | AI | public | 2020-07-23 10:31 | 2020-07-25 17:59 | ||||
Reporter | esainane | ||||||||
Assigned To | Kloot | ||||||||
Priority | normal | Severity | minor | Reproducibility | always | ||||
Status | resolved | Resolution | fixed | ||||||
Product Version | 104.0 +git | ||||||||
Target Version | Fixed in Version | ||||||||
Summary | 0006412: CircuitAI does not build with C++17: C++17 requires comparator for std::map to be const | ||||||||
Description | Building Spring fails partway through a build at: [ 45%] Building CXX object AI/Skirmish/CppTestAI/CMakeFiles/CppTestAI.dir/src/AIExport.cpp.o Proposed fix to the AI/Skirmish/CircuitAI submodule, which resolves the issue: $ git diff diff --git a/src/circuit/util/Defines.h b/src/circuit/util/Defines.h index f060ac7f..294212a1 100644 --- a/src/circuit/util/Defines.h +++ b/src/circuit/util/Defines.h @@ -50,7 +50,7 @@ template<typename T> static inline constexpr T SQUARE(T x) { return x * x; } typedef std::vector<springai::AIFloat3> F3Vec; struct cmp_str { - bool operator()(char const* a, char const* b) { + bool operator()(char const* a, char const* b) const { return strcmp(a, b) < 0; } }; Will make PR with this later, unless someone else gets there first. | ||||||||
Steps To Reproduce | From the root of a spring repository: git reset --hard e1f249fcc # maintenance+1544 mkdir build-circuit-test cd build-circuit-test cmake -DCMAKE_BUILD_TYPE=Release -DAI_TYPES=ALL .. make -j 12 # Get to the failing point quickly VERBOSE=1 make # Grab the failing command Verify that this is the failing command: cd $REPO/build-circuit-test/AI/Skirmish/CircuitAI && /usr/lib/ccache/c++ -DASIO_STANDALONE -DBUILDING_AI -DBUILDING_SKIRMISH_AI -DCircuitAI_EXPORTS -DSPRING_DATADIR=\"/usr/local/share/games/spring\" -DSYNCCHECK -DTHREADPOOL -DUSE_LIBSQUISH -DUSE_VALGRIND -D_GLIBCXX_USE_NANOSLEEP -D_GNU_SOURCE=1 -D_RANDOM_TCC -D_REENTRANT -I$REPO/AI/Skirmish/CircuitAI/src/circuit -I$REPO/AI/Skirmish/CircuitAI/src/lib -I/usr/include/SDL2 -I$REPO/build-circuit-test/AI/Wrappers/Cpp/src-generated -I$REPO/AI/Wrappers/Cpp/src -I$REPO/rts -I$REPO/build-circuit-test/src-generated/engine -I$REPO/rts/ExternalAI/Interface -I$REPO/AI/Wrappers -fuse-ld=gold -std=c++17 -fdiagnostics-color=auto -mtune=generic -msse -mfpmath=sse -mno-sse2 -mno-sse3 -mno-ssse3 -mno-sse4.1 -mno-sse4.2 -mno-sse4 -mno-sse4a -mno-avx -mno-fma -mno-fma4 -mno-xop -mno-lwp -mno-avx2 -fsingle-precision-constant -frounding-math -mieee-fp -pipe -fno-strict-aliasing -fvisibility=hidden -fvisibility-inlines-hidden -pthread -O2 -Wformat -Wformat-security -DNDEBUG -fPIC -fpic -Wall -o CMakeFiles/CircuitAI.dir/src/AIExport.cpp.o -c $REPO/AI/Skirmish/CircuitAI/src/AIExport.cpp In file included from /usr/include/c++/8/map:60, from $REPO/build-circuit-test/AI/Wrappers/Cpp/src-generated/IncludesHeaders.h:10, from $REPO/build-circuit-test/AI/Wrappers/Cpp/src-generated/OOAICallback.h:10, from $REPO/AI/Skirmish/CircuitAI/src/AIExport.cpp:7: /usr/include/c++/8/bits/stl_tree.h: In instantiation of ‘class std::_Rb_tree<const char*, std::pair<const char* const, circuit::CCircuitDef*>, std::_Select1st<std::pair<const char* const, circuit::CCircuitDef*> >, cmp_str, std::allocator<std::pair<const char* const, circuit::CCircuitDef*> > >’: /usr/include/c++/8/bits/stl_map.h:151:17: required from ‘class std::map<const char*, circuit::CCircuitDef*, cmp_str>’ $REPO/AI/Skirmish/CircuitAI/src/circuit/CircuitAI.h:211:12: required from here /usr/include/c++/8/bits/stl_tree.h:457:21: error: static assertion failed: comparison object must be invocable as const static_assert(is_invocable_v<const _Compare&, const _Key&, const _Key&>, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ✘ 1 ➭$ Verify that removing --std=c++17 is sufficient to fix the command: cd $REPO/build-circuit-test/AI/Skirmish/CircuitAI && /usr/lib/ccache/c++ -DASIO_STANDALONE -DBUILDING_AI -DBUILDING_SKIRMISH_AI -DCircuitAI_EXPORTS -DSPRING_DATADIR=\"/usr/local/share/games/spring\" -DSYNCCHECK -DTHREADPOOL -DUSE_LIBSQUISH -DUSE_VALGRIND -D_GLIBCXX_USE_NANOSLEEP -D_GNU_SOURCE=1 -D_RANDOM_TCC -D_REENTRANT -I$REPO/AI/Skirmish/CircuitAI/src/circuit -I$REPO/AI/Skirmish/CircuitAI/src/lib -I/usr/include/SDL2 -I$REPO/build-circuit-test/AI/Wrappers/Cpp/src-generated -I$REPO/AI/Wrappers/Cpp/src -I$REPO/rts -I$REPO/build-circuit-test/src-generated/engine -I$REPO/rts/ExternalAI/Interface -I$REPO/AI/Wrappers -fuse-ld=gold -fdiagnostics-color=auto -mtune=generic -msse -mfpmath=sse -mno-sse2 -mno-sse3 -mno-ssse3 -mno-sse4.1 -mno-sse4.2 -mno-sse4 -mno-sse4a -mno-avx -mno-fma -mno-fma4 -mno-xop -mno-lwp -mno-avx2 -fsingle-precision-constant -frounding-math -mieee-fp -pipe -fno-strict-aliasing -fvisibility=hidden -fvisibility-inlines-hidden -pthread -O2 -Wformat -Wformat-security -DNDEBUG -fPIC -fpic -Wall -o CMakeFiles/CircuitAI.dir/src/AIExport.cpp.o -c $REPO/AI/Skirmish/CircuitAI/src/AIExport.cpp ✔ 0 ➭$ | ||||||||
Additional Information | $ uname -a Linux sybil 4.19.0-9-amd64 #1 SMP Debian 4.19.118-2+deb10u1 (2020-06-07) x86_64 GNU/Linux $ gcc --version gcc (Debian 8.3.0-6) 8.3.0 Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ dpkg -l 'libc-bin:amd64' 'libstdc++6:amd64' Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-================-============-============-================================= ii libc-bin 2.28-10 amd64 GNU C Library: Binaries ii libstdc++6:amd64 8.3.0-6 amd64 GNU Standard C++ Library v3 | ||||||||
Tags | No tags attached. | ||||||||
Checked infolog.txt for Errors | Irrelevant | ||||||||
Attached Files |
|
Notes | |
ThinkSome (reporter) 2020-07-24 13:27 |
Is this the same issue? In file included from /usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/map:60, from /tmp/portage/games-strategy/spring-104.0.1_p1544/work/spring-104.0.1_p1544_build/AI/Wrappers/Cpp/src-generated/IncludesHeaders.h:10, from /tmp/portage/games-strategy/spring-104.0.1_p1544/work/spring-104.0.1_p1544_build/AI/Wrappers/Cpp/src-generated/Unit.h:10, from /tmp/portage/games-strategy/spring-104.0.1_p1544/work/spring-104.0.1_p1544/AI/Skirmish/CircuitAI/src/circuit/unit/CoreUnit.h:11, from /tmp/portage/games-strategy/spring-104.0.1_p1544/work/spring-104.0.1_p1544/AI/Skirmish/CircuitAI/src/circuit/unit/AllyUnit.h:11, from /tmp/portage/games-strategy/spring-104.0.1_p1544/work/spring-104.0.1_p1544/AI/Skirmish/CircuitAI/src/circuit/unit/AllyTeam.h:11, from /tmp/portage/games-strategy/spring-104.0.1_p1544/work/spring-104.0.1_p1544/AI/Skirmish/CircuitAI/src/circuit/CircuitAI.h:11, from /tmp/portage/games-strategy/spring-104.0.1_p1544/work/spring-104.0.1_p1544/AI/Skirmish/CircuitAI/src/circuit/CircuitAI.cpp:8: /usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/bits/stl_tree.h: In instantiation of 'static const _Key& std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_S_key(std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_Const_Link_type) [with _Key = const char*; _Val = std::pair<const char* const, circuit::CCircuitDef*>; _KeyOfValue = std::_Select1st<std::pair<const char* const, circuit::CCircuitDef*> >; _Compare = cmp_str; _Alloc = std::allocator<std::pair<const char* const, circuit::CCircuitDef*> >; std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_Const_Link_type = const std::_Rb_tree_node<std::pair<const char* const, circuit::CCircuitDef*> >*]': /usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/bits/stl_tree.h:2459:62: required from 'std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator std::_Rb_tree<_ Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_emplace_hint_unique(std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator, _Args&& ...) [with _Args = {const std::piecewise_construct_t&, std::tuple<const char*&&>, std::tuple<>}; _Key = const char*; _Val = std::pair<const char* const, circuit::CCircuitDef*>; _KeyOfValue = std::_Select1st<std::pair<const char* const, circuit::CCircuitDef*> >; _Compare = cmp_str; _Alloc = std::allocator<std::pair<const char* const, circuit::CCircuitDef*> >; std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator = std::_Rb_tree_iterator<std::pair<const char* const, circuit::CCircuitDef*> >; std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc> ::const_iterator = std::_Rb_tree_const_iterator<std::pair<const char* const, circuit::CCircuitDef*> >]' /usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/bits/stl_map.h:518:8: required from 'std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](std::map<_Key, _Tp, _Compare, _Alloc>::key_type&&) [with _Key = const char*; _Tp = circuit::CCircuitDef*; _Compare = cmp_str; _Alloc = std::allocator<std::pair<const char* const, circuit::CCircuitDef*> >; std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type = circuit::CCircuitDef*; std::map<_Key, _Tp, _Compare, _Alloc>::key_type = const char*]' /tmp/portage/games-strategy/spring-104.0.1_p1544/work/spring-104.0.1_p1544/AI/Skirmish/CircuitAI/src/circuit/CircuitAI.cpp:1415:27: required from here /usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/bits/stl_tree.h:780:8: error: static assertion failed: comparison object must be invocable as const 780 | is_invocable_v<const _Compare&, const _Key&, const _Key&>, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
lamer (reporter) 2020-07-24 15:37 |
most likely the same. Thanks, PR: https://github.com/spring/CircuitAI/pull/16 |
Issue History | |||
Date Modified | Username | Field | Change |
---|---|---|---|
2020-07-23 10:31 | esainane | New Issue | |
2020-07-24 13:27 | ThinkSome | Note Added: 0020491 | |
2020-07-24 15:37 | lamer | Note Added: 0020492 | |
2020-07-25 17:59 | hokomoko | Assigned To | => Kloot |
2020-07-25 17:59 | hokomoko | Status | new => resolved |
2020-07-25 17:59 | hokomoko | Resolution | open => fixed |