Skip to content

Compiler error with GCC 11.3: template argument deduction failed  #296

Open
@carlosgalvezp

Description

Hi!

I'm using commit 8fafda4 of rapidcheck, building on C++14 mode. When trying to bump the compiler to GCC 11.3.0 (from GCC 7.5.0) I get the following compile error:

external/rapidcheck/include/rapidcheck/seq/Create.hpp: In lambda function:
external/rapidcheck/include/rapidcheck/seq/Create.hpp:189:16: error: no matching function for call to 'map(rc::Seq<long unsigned int>, rc::seq::subranges(std::size_t, std::size_t)::<lambda(std::size_t)>::<lambda(std::size_t)>)'
  189 |                        return seq::map(
      |                ^       ~~~~~~~~~~~~~~~~
  190 |                            seq::range<std::size_t>(start, end - rangeSize + 1),
      |                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  191 |                            [=](std::size_t rangeStart) {
      |                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  192 |                              return std::make_pair(rangeStart,
      |                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  193 |                                                    rangeStart + rangeSize);
      |                                                    ~~~~~~~~~~~~~~~~~~~~~~~~
  194 |                            });
      |                 
external/rapidcheck/include/rapidcheck/seq/Transform.hpp:329:1: note: candidate: 'template<class T, class Mapper> rc::Seq<typename std::decay<typename std::result_of<Mapper(T, ...)>::type>::type> rc::seq::map(rc::Seq<T>, Mapper&&)'
  329 | Seq<Decay<typename rc::compat::return_type<Mapper,T>::type>> map(Seq<T> seq,
      | ^~~
external/rapidcheck/include/rapidcheck/seq/Transform.hpp:329:1: note:   template argument deduction/substitution failed:
external/rapidcheck/include/rapidcheck/seq/Transform.hpp: In substitution of 'template<class T, class Mapper> rc::Seq<typename std::decay<typename std::result_of<Mapper(T, ...)>::type>::type> rc::seq::map(rc::Seq<T>, Mapper&&) [with T = long unsigned int; Mapper = rc::seq::subranges(std::size_t, std::size_t)::<lambda(std::size_t)>::<lambda(std::size_t)>]':
external/rapidcheck/include/rapidcheck/seq/Create.hpp:189:16:   required from here
external/rapidcheck/include/rapidcheck/seq/Transform.hpp:329:1: error: invalid use of incomplete type 'struct std::result_of<rc::seq::subranges(std::size_t, std::size_t)::<lambda(std::size_t)>::<lambda(std::size_t)>(long unsigned int, ...)>'
external/gcc_x86/gcc-install/bin/../lib/gcc/x86_64-pc-linux-gnu/11.3.0/../../../../include/c++/11.3.0/type_traits:2372:36: note: declaration of 'struct std::result_of<rc::seq::subranges(std::size_t, std::size_t)::<lambda(std::size_t)>::<lambda(std::size_t)>(long unsigned int, ...)>'
 2372 |   template<typename _Signature>
      |                                    ^        

This happens when calling the function rc::gen::inRange<int>(0, N).

Do you have any feeling for what might be going on? Thanks!

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions