https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115810
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Ever confirmed|0 |1 Last reconfirmed|2024-07-06 00:00:00 |2024-07-08 Status|UNCONFIRMED |NEW --- Comment #12 from Jonathan Wakely <redi at gcc dot gnu.org> --- Reproduced in an ubuntu:24.04 container with g++-14 installed: git clone -b gcc-patch https://github.com/linuxnyasha/cserver.git cd cserver mkdir build cmake -B ./build -DCMAKE_CXX_COMPILER=g++-14 -DCMAKE_C_COMPILER=gcc-14 -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-fsanitize=address,undefined" -DENABLE_TESTS=1 -DENABLE_EXAMPLES=1 -S . && cmake --build ./build --config Release -v ... [ 89%] Building CXX object CMakeFiles/cserver_tests.dir/tests/all_meta.cpp.o /usr/bin/g++-14 -DBOOST_CONTAINER_NO_LIB -DBOOST_CONTAINER_STATIC_LINK -DBOOST_CONTEXT_EXPORT="" -DBOOST_CONTEXT_NO_LIB="" -DBOOST_CONTEXT_STATIC_LINK="" -DBOOST_COROUTINE_NO_LIB -DBOOST_COROUTINE_STATIC_LINK -DBOOST_DATE_TIME_NO_LIB -DBOOST_DATE_TIME_STATIC_LINK -DBOOST_PROGRAM_OPTIONS_NO_LIB -DBOOST_PROGRAM_OPTIONS_STATIC_LINK -DBOOST_URL_NO_LIB=1 -DBOOST_URL_STATIC_LINK=1 -DFMT_HEADER_ONLY=1 -I/cserver/include -I/cserver/build/_deps/utempl-src/include -I/cserver/build/_deps/boost-src/libs/pfr/include -I/cserver/build/_deps/llhttp-src/include -I/cserver/build/_deps/boost-src/libs/url/include -I/cserver/build/_deps/boost-src/libs/align/include -I/cserver/build/_deps/boost-src/libs/assert/include -I/cserver/build/_deps/boost-src/libs/config/include -I/cserver/build/_deps/boost-src/libs/core/include -I/cserver/build/_deps/boost-src/libs/static_assert/include -I/cserver/build/_deps/boost-src/libs/throw_exception/include -I/cserver/build/_deps/boost-src/libs/mp11/include -I/cserver/build/_deps/boost-src/libs/optional/include -I/cserver/build/_deps/boost-src/libs/detail/include -I/cserver/build/_deps/boost-src/libs/preprocessor/include -I/cserver/build/_deps/boost-src/libs/type_traits/include -I/cserver/build/_deps/boost-src/libs/move/include -I/cserver/build/_deps/boost-src/libs/predef/include -I/cserver/build/_deps/boost-src/libs/utility/include -I/cserver/build/_deps/boost-src/libs/io/include -I/cserver/build/_deps/boost-src/libs/system/include -I/cserver/build/_deps/boost-src/libs/variant2/include -I/cserver/build/_deps/boost-src/libs/winapi/include -I/cserver/build/_deps/boost-src/libs/program_options/include -I/cserver/build/_deps/boost-src/libs/any/include -I/cserver/build/_deps/boost-src/libs/type_index/include -I/cserver/build/_deps/boost-src/libs/container_hash/include -I/cserver/build/_deps/boost-src/libs/describe/include -I/cserver/build/_deps/boost-src/libs/function/include -I/cserver/build/_deps/boost-src/libs/bind/include -I/cserver/build/_deps/boost-src/libs/iterator/include -I/cserver/build/_deps/boost-src/libs/concept_check/include -I/cserver/build/_deps/boost-src/libs/function_types/include -I/cserver/build/_deps/boost-src/libs/mpl/include -I/cserver/build/_deps/boost-src/libs/fusion/include -I/cserver/build/_deps/boost-src/libs/tuple/include -I/cserver/build/_deps/boost-src/libs/typeof/include -I/cserver/build/_deps/boost-src/libs/functional/include -I/cserver/build/_deps/boost-src/libs/smart_ptr/include -I/cserver/build/_deps/boost-src/libs/lexical_cast/include -I/cserver/build/_deps/boost-src/libs/container/include -I/cserver/build/_deps/boost-src/libs/intrusive/include -I/cserver/build/_deps/boost-src/libs/integer/include -I/cserver/build/_deps/boost-src/libs/asio/include -I/cserver/build/_deps/boost-src/libs/context/include -I/cserver/build/_deps/boost-src/libs/pool/include -I/cserver/build/_deps/boost-src/libs/coroutine/include -I/cserver/build/_deps/boost-src/libs/exception/include -I/cserver/build/_deps/boost-src/libs/date_time/include -I/cserver/build/_deps/boost-src/libs/algorithm/include -I/cserver/build/_deps/boost-src/libs/array/include -I/cserver/build/_deps/boost-src/libs/range/include -I/cserver/build/_deps/boost-src/libs/conversion/include -I/cserver/build/_deps/boost-src/libs/regex/include -I/cserver/build/_deps/boost-src/libs/unordered/include -I/cserver/build/_deps/boost-src/libs/numeric/conversion/include -I/cserver/build/_deps/boost-src/libs/tokenizer/include -isystem /cserver/build/_deps/gtest-src/googletest/include -isystem /cserver/build/_deps/gtest-src/googletest -isystem /cserver/build/_deps/fmt-src/include -isystem /cserver/build/_deps/nameof-src/include -fsanitize=address,undefined -O3 -DNDEBUG -std=gnu++23 -MD -MT CMakeFiles/cserver_tests.dir/tests/all_meta.cpp.o -MF CMakeFiles/cserver_tests.dir/tests/all_meta.cpp.o.d -o CMakeFiles/cserver_tests.dir/tests/all_meta.cpp.o -c /cserver/tests/all_meta.cpp In file included from /cserver/build/_deps/utempl-src/include/utempl/loopholes/counter.hpp:4, from /cserver/include/cserver/engine/components.hpp:7, from /cserver/tests/all_meta.cpp:3: /cserver/build/_deps/utempl-src/include/utempl/loopholes/core.hpp:8:40: warning: friend declaration 'constexpr auto utempl::loopholes::Magic(Getter<I>)' declares a non-template function [-Wnon-template-friend] 8 | friend constexpr auto Magic(Getter<I>); | ^ /cserver/build/_deps/utempl-src/include/utempl/loopholes/core.hpp:8:40: note: (if this is not what you intended, make sure the function template has already been declared and add '<>' after the function name here) In file included from /cserver/include/cserver/engine/components.hpp:8: /cserver/build/_deps/utempl-src/include/utempl/utils.hpp:180:40: warning: friend declaration 'consteval auto utempl::impl::Magic(Getter<T>)' declares a non-template function [-Wnon-template-friend] 180 | friend consteval auto Magic(Getter<T>); | ^ /cserver/include/cserver/engine/components.hpp: In instantiation of 'cserver::ServiceContextBuilder<cserver::ConstexprConfig<cserver::impl::NamedValue<utempl::ConstexprString<8>{std::array<char, 8>{"threads"}}, int> >{utempl::Tuple<cserver::impl::NamedValue<utempl::ConstexprString<8>{std::array<char, 8>{"threads"}}, int> >{utempl::impl::TupleHelper<std::integer_sequence<long unsigned int, 0>, cserver::impl::NamedValue<utempl::ConstexprString<8>{std::array<char, 8>{"threads"}}, int> >{utempl::impl::TupleLeaf<0, cserver::impl::NamedValue<utempl::ConstexprString<8>{std::array<char, 8>{"threads"}}, int> >{cserver::impl::NamedValue<utempl::ConstexprString<8>{std::array<char, 8>{"threads"}}, int>{8}}}}}, cserver::ComponentConfig<utempl::ConstexprString<5>{std::array<char, 5>{"some"}}, SomeComponent, cserver::Options<>()>, cserver::ComponentConfig<utempl::ConstexprString<6>{std::array<char, 6>{"other"}}, OtherComponent, cserver::Options<>()>, cserver::ComponentConfig<utempl::ConstexprString<7>{std::array<char, 7>{"other2"}}, OtherComponent2, cserver::Options<>()> >::GetDependencyGraph()::<lambda(cserver::ComponentConfig<names, Components, Options>...)> [with ConstexprString<...auto...> ...names = {utempl::ConstexprString<5>{std::array<char, 5>{"some"}}, utempl::ConstexprString<6>{std::array<char, 6>{"other"}}, utempl::ConstexprString<7>{std::array<char, 7>{"other2"}}}; Components = {SomeComponent, OtherComponent, OtherComponent2}; Options<...auto...> ...Options = {cserver::Options<>(), cserver::Options<>(), cserver::Options<>()}]': /cserver/include/cserver/engine/components.hpp:559:6: required from 'static consteval auto cserver::ServiceContextBuilder<config, ComponentConfigs>::GetDependencyGraph() [with ConstexprConfig<...auto...> config = cserver::ConstexprConfig<cserver::impl::NamedValue<utempl::ConstexprString<8>{std::array<char, 8>{"threads"}}, int> >{utempl::Tuple<cserver::impl::NamedValue<utempl::ConstexprString<8>{std::array<char, 8>{"threads"}}, int> >{utempl::impl::TupleHelper<std::integer_sequence<long unsigned int, 0>, cserver::impl::NamedValue<utempl::ConstexprString<8>{std::array<char, 8>{"threads"}}, int> >{utempl::impl::TupleLeaf<0, cserver::impl::NamedValue<utempl::ConstexprString<8>{std::array<char, 8>{"threads"}}, int> >{cserver::impl::NamedValue<utempl::ConstexprString<8>{std::array<char, 8>{"threads"}}, int>{8}}}}}; ComponentConfigs = {cserver::ComponentConfig<utempl::ConstexprString<5>{std::array<char, 5>{"some"}}, SomeComponent, cserver::Options<>()>, cserver::ComponentConfig<utempl::ConstexprString<6>{std::array<char, 6>{"other"}}, OtherComponent, cserver::Options<>()>, cserver::ComponentConfig<utempl::ConstexprString<7>{std::array<char, 7>{"other2"}}, OtherComponent2, cserver::Options<>()>}]' /cserver/build/_deps/utempl-src/include/utempl/utils.hpp:180:40: warning: 550 | return [&]<utempl::ConstexprString... names, typename... Components, Options... Options>( /cserver/build/_deps/utempl-src/include/utempl/utils.hpp:180:40: warning: | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 551 | ComponentConfig<names, Components, Options>...) { /cserver/build/_deps/utempl-src/include/utempl/utils.hpp:180:40: warning: | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 552 | return DependencyGraph<DependencyGraphElement<names, /cserver/build/_deps/utempl-src/include/utempl/utils.hpp:180:40: warning: | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 553 | []<utempl::ConstexprString name, typename Component, ::cserver::Options OOptions>( /cserver/build/_deps/utempl-src/include/utempl/utils.hpp:180:40: warning: | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 554 | ComponentConfig<name, Component, OOptions>) { /cserver/build/_deps/utempl-src/include/utempl/utils.hpp:180:40: warning: | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 555 | impl::DependencyInfoInjector<Component, name, config, ComponentConfigs...> injector; /cserver/build/_deps/utempl-src/include/utempl/utils.hpp:180:40: warning: | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 556 | injector.Inject(); /cserver/build/_deps/utempl-src/include/utempl/utils.hpp:180:40: warning: | ~~~~~~~~~~~~~~~~~~ 557 | return injector.GetDependencies(); /cserver/build/_deps/utempl-src/include/utempl/utils.hpp:180:40: warning: | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 558 | }(ComponentConfigs{})>...>{}; /cserver/build/_deps/utempl-src/include/utempl/utils.hpp:180:40: warning: | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 559 | }(ComponentConfigs{}...); /cserver/build/_deps/utempl-src/include/utempl/utils.hpp:180:40: warning: | ~^~~~~~~~~~~~~~~~~~~~~~~ /cserver/include/cserver/engine/components.hpp:573:63: required from 'static consteval auto cserver::ServiceContextBuilder<config, ComponentConfigs>::Sort() [with ConstexprConfig<...auto...> config = cserver::ConstexprConfig<cserver::impl::NamedValue<utempl::ConstexprString<8>{std::array<char, 8>{"threads"}}, int> >{utempl::Tuple<cserver::impl::NamedValue<utempl::ConstexprString<8>{std::array<char, 8>{"threads"}}, int> >{utempl::impl::TupleHelper<std::integer_sequence<long unsigned int, 0>, cserver::impl::NamedValue<utempl::ConstexprString<8>{std::array<char, 8>{"threads"}}, int> >{utempl::impl::TupleLeaf<0, cserver::impl::NamedValue<utempl::ConstexprString<8>{std::array<char, 8>{"threads"}}, int> >{cserver::impl::NamedValue<utempl::ConstexprString<8>{std::array<char, 8>{"threads"}}, int>{8}}}}}; ComponentConfigs = {cserver::ComponentConfig<utempl::ConstexprString<5>{std::array<char, 5>{"some"}}, SomeComponent, cserver::Options<>()>, cserver::ComponentConfig<utempl::ConstexprString<6>{std::array<char, 6>{"other"}}, OtherComponent, cserver::Options<>()>, cserver::ComponentConfig<utempl::ConstexprString<7>{std::array<char, 7>{"other2"}}, OtherComponent2, cserver::Options<>()>}]' /cserver/build/_deps/utempl-src/include/utempl/utils.hpp:180:40: warning: 573 | constexpr auto sorted = TopologicalSort(GetDependencyGraph()); /cserver/build/_deps/utempl-src/include/utempl/utils.hpp:180:40: warning: | ~~~~~~~~~~~~~~~~~~^~ /cserver/tests/all_meta.cpp:36:37: required from here /cserver/build/_deps/utempl-src/include/utempl/utils.hpp:180:40: warning: 31 | constexpr auto builder = cserver::ServiceContextBuilder{} /cserver/build/_deps/utempl-src/include/utempl/utils.hpp:180:40: warning: | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 32 | .Append<SomeComponent>() /cserver/build/_deps/utempl-src/include/utempl/utils.hpp:180:40: warning: | ~~~~~~~~~~~~~~~~~~~~~~~~ 33 | .Append<OtherComponent>() /cserver/build/_deps/utempl-src/include/utempl/utils.hpp:180:40: warning: | ~~~~~~~~~~~~~~~~~~~~~~~~~ 34 | .Append<OtherComponent2>() /cserver/build/_deps/utempl-src/include/utempl/utils.hpp:180:40: warning: | ~~~~~~~~~~~~~~~~~~~~~~~~~~ 35 | .AppendConfigParam<"threads", 8>() /cserver/build/_deps/utempl-src/include/utempl/utils.hpp:180:40: warning: | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 36 | .Sort(); /cserver/build/_deps/utempl-src/include/utempl/utils.hpp:180:40: warning: | ~~~~~^~ /cserver/include/cserver/engine/components.hpp:558:80: error: invalid use of incomplete type 'struct cserver::DependencyGraph<cserver::DependencyGraphElement<names, <lambda>(ComponentConfigs{})>...>' 558 | }(ComponentConfigs{})>...>{}; | ^ /cserver/include/cserver/engine/components.hpp:421:8: note: declaration of 'struct cserver::DependencyGraph<cserver::DependencyGraphElement<names, <lambda>(ComponentConfigs{})>...>' 421 | struct DependencyGraph { | ^~~~~~~~~~~~~~~