Compilation errors 0.17.4 with -std=c++17

Visto 40 veces
Saltar al primer mensaje no leído

Andrey Deykunov

no leída,
20 abr 2020, 17:51:4820/4/20
a actor-framework

Hi guys,

I got compilation errors while building 0.17.4 with clang9 and -std=c++17 option. Using the same compiler with c++11 all compiles fine. Any ideas?


The output is:

[ 33%] Building CXX object CMakeFiles/caf-test.dir/libcaf_core/test/make_config_value_field.cpp.o
In file included from /home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/test/make_config_value_field.cpp:21:
In file included from /home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/caf/make_config_value_field.hpp:26:
In file included from /home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/caf/detail/config_value_field_impl.hpp:24:
In file included from /home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/caf/config_value.hpp:33:
In file included from /home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/caf/detail/move_if_not_ptr.hpp:23:
/home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/caf/detail/type_traits.hpp:496:32: error: implicit instantiation of undefined template 'caf::detail::callable_trait<int ((anonymous namespace)::get_foo_t::*)(const (anonymous namespace)::foobar &) const noexcept>'
 
using result_type = typename type::result_type;
                               
^
/home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/caf/detail/type_traits.hpp:510:29: note: in instantiation of template class 'caf::detail::get_callable_trait_helper<(anonymous namespace)::get_foo_t, false, true>' requested here
struct get_callable_trait : get_callable_trait_helper<decay_t<T>> {};
                           
^
/home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/caf/detail/type_traits.hpp:513:1: note: in instantiation of template class 'caf::detail::get_callable_trait<(anonymous namespace)::get_foo_t>' requested here
using get_callable_trait_t = typename get_callable_trait<T>::type;
^
/home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/caf/detail/config_value_field_impl.hpp:77:17: note: in instantiation of template type alias 'get_callable_trait_t' requested here
 
using trait = get_callable_trait_t<Get>;
               
^
/home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/caf/detail/config_value_field_impl.hpp:96:16: note: in instantiation of template class 'caf::detail::config_value_field_trait<(anonymous namespace)::get_foo_t>' requested here
     
typename config_value_field_trait<Get>::object_type,
               
^
/home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/test/make_config_value_field.cpp:194:3: note: in instantiation of template class 'caf::detail::config_value_field_impl<std::__1::pair<(anonymous namespace)::get_foo_t, (anonymous namespace)::set_foo_t> >' requested here
  make_config_value_field
("foo", get_foo, set_foo);
 
^
/home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/caf/detail/type_traits.hpp:439:8: note: template is declared here
struct callable_trait;
       
^
/home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/caf/detail/type_traits.hpp:497:30: error: implicit instantiation of undefined template 'caf::detail::callable_trait<int ((anonymous namespace)::get_foo_t::*)(const (anonymous namespace)::foobar &) const noexcept>'
 
using arg_types = typename type::arg_types;
                             
^
/home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/caf/detail/type_traits.hpp:439:8: note: template is declared here
struct callable_trait;
       
^
/home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/caf/detail/type_traits.hpp:498:29: error: implicit instantiation of undefined template 'caf::detail::callable_trait<int ((anonymous namespace)::get_foo_t::*)(const (anonymous namespace)::foobar &) const noexcept>'
 
using fun_type = typename type::fun_type;
                           
^
/home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/caf/detail/type_traits.hpp:439:8: note: template is declared here
struct callable_trait;
       
^
/home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/caf/detail/type_traits.hpp:499:28: error: implicit instantiation of undefined template 'caf::detail::callable_trait<int ((anonymous namespace)::get_foo_t::*)(const (anonymous namespace)::foobar &) const noexcept>'
 
using fun_sig = typename type::fun_sig;
                           
^
/home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/caf/detail/type_traits.hpp:439:8: note: template is declared here
struct callable_trait;
       
^
In file included from /home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/test/make_config_value_field.cpp:21:
In file included from /home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/caf/make_config_value_field.hpp:26:
/home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/caf/detail/config_value_field_impl.hpp:122:59: error: only virtual member functions can be marked 'override'
 
const value_type& get_value(const object_type& x) const override {
                                                         
^~~~~~~~~
/home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/test/make_config_value_field.cpp:194:3: note: in instantiation of template class 'caf::detail::config_value_field_impl<std::__1::pair<(anonymous namespace)::get_foo_t, (anonymous namespace)::set_foo_t> >' requested here
  make_config_value_field
("foo", get_foo, set_foo);
 
^
In file included from /home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/test/make_config_value_field.cpp:21:
In file included from /home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/caf/make_config_value_field.hpp:26:
/home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/caf/detail/config_value_field_impl.hpp:127:54: error: only virtual member functions can be marked 'override'
 
void set_value(object_type& x, value_type y) const override {
                                                     
^~~~~~~~~
/home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/test/make_config_value_field.cpp:203:18: error: non-const lvalue reference to type 'config_value_field<(anonymous namespace)::foobar>' cannot bind to a value of unrelated type 'caf::detail::config_value_field_impl<std::__1::pair<(anonymous namespace)::get_foo_t, (anonymous namespace)::set_foo_t> >'
  test_foo_field
(foo_field);
                 
^~~~~~~~~
/home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/test/make_config_value_field.cpp:130:51: note: passing argument to parameter 'foo_field' here
 
void test_foo_field(config_value_field<foobar>& foo_field) {
                                                 
^
In file included from /home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/test/make_config_value_field.cpp:21:
In file included from /home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/caf/make_config_value_field.hpp:26:
/home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/caf/detail/config_value_field_impl.hpp:114:7: error: type 'caf::detail::config_value_field_impl<std::__1::pair<(anonymous namespace)::get_foo_t, (anonymous namespace)::set_foo_t> >::super' (aka 'config_value_field_base<int, int>') is not a direct or virtual base of 'caf::detail::config_value_field_impl<std::__1::pair<(anonymous namespace)::get_foo_t, (anonymous namespace)::set_foo_t> >'
   
: super(name, std::move(default_value), predicate),
     
^~~~~
/home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/caf/make_config_value_field.hpp:47:10: note: in instantiation of member function 'caf::detail::config_value_field_impl<std::__1::pair<(anonymous namespace)::get_foo_t, (anonymous namespace)::set_foo_t> >::config_value_field_impl' requested here
 
return {name, std::move(getter), std::move(setter),
         
^
/home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/test/make_config_value_field.cpp:194:3: note: in instantiation of function template specialization 'caf::make_config_value_field<(anonymous namespace)::get_foo_t, (anonymous namespace)::set_foo_t, void>' requested here
  make_config_value_field
("foo", get_foo, set_foo);
 
^
In file included from /home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/test/make_config_value_field.cpp:21:
/home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/caf/make_config_value_field.hpp:47:10: error: no matching constructor for initialization of 'detail::config_value_field_impl<std::pair<get_foo_t, set_foo_t> >'
 
return {name, std::move(getter), std::move(setter),
         
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/test/make_config_value_field.cpp:201:20: note: in instantiation of function template specialization 'caf::make_config_value_field<(anonymous namespace)::get_foo_t, (anonymous namespace)::set_foo_t, void, int, bool (&)(const int &)>' requested here
 
auto foo_field = make_config_value_field("foo", get_foo, set_foo, 42,
                   
^
/home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/caf/detail/config_value_field_impl.hpp:120:13: note: candidate constructor not viable: requires 1 argument, but 5 were provided
 
constexpr config_value_field_impl(config_value_field_impl&&) = default;
           
^
/home/adeykunov/hpbx/splibs/CAF/actor-framework-0.17.4/libcaf_core/caf/detail/config_value_field_impl.hpp:37:7: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 5 were provided
class config_value_field_impl;
     
^
9 errors generated.
make
[2]: *** [CMakeFiles/caf-test.dir/libcaf_core/test/make_config_value_field.cpp.o] Error 1
CMakeFiles/caf-test.dir/build.make:1886: recipe for target 'CMakeFiles/caf-test.dir/libcaf_core/test/make_config_value_field.cpp.o' failed
make
[1]: *** [CMakeFiles/caf-test.dir/all] Error 2
make
: *** [all] Error 2
CMakeFiles/Makefile2:280: recipe for target 'CMakeFiles/caf-test.dir/all' failed
Makefile:138: recipe for target 'all' failed



Thanks,
Andrey

Dominik Charousset

no leída,
21 abr 2020, 14:46:3021/4/20
a actor-f...@googlegroups.com
Hi!

This is probably the same bug as reported in https://github.com/actor-framework/actor-framework/issues/1078.

Since C++17, `noexcept` is part of the type signature. This breaks our callable trait, but I have a patch ready as PR: https://github.com/actor-framework/actor-framework/pull/1093.

Once that PR gets merged, you can use the `release/0.17` branch until 0.17.5 comes out.

Dominik
> --
> You received this message because you are subscribed to the Google Groups "actor-framework" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to actor-framewo...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/actor-framework/e786ea4b-a3ca-481d-b39f-9340059b97ce%40googlegroups.com.

Responder a todos
Responder al autor
Reenviar
0 mensajes nuevos