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 {
      |        ^~~~~~~~~~~~~~~

Reply via email to