Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Build failure when using std::variant #24

Open
tusooa opened this issue Jan 23, 2021 · 2 comments
Open

Build failure when using std::variant #24

tusooa opened this issue Jan 23, 2021 · 2 comments
Labels
bug Something isn't working

Comments

@tusooa
Copy link
Contributor

tusooa commented Jan 23, 2021

I got this build failure:

/usr/include/zug/sequence.hpp:225:47: error: wrong number of template arguments (1, should be at least 2)
  225 |                       std::decay_t<RangeTs>...>
      |                                               ^
/usr/include/zug/sequence.hpp:158:8: note: provided for ‘template<class ValueT, class XformT, class ... RangeTs> struct zug::sequence_range’
  158 | struct sequence_range
      |        ^~~~~~~~~~~~~~
/usr/include/zug/sequence.hpp:225:47: error: wrong number of template arguments (1, should be at least 2)
  225 |                       std::decay_t<RangeTs>...>
      |                                               ^
/usr/include/zug/sequence.hpp:158:8: note: provided for ‘template<class ValueT, class XformT, class ... RangeTs> struct zug::sequence_range’
  158 | struct sequence_range
      |        ^~~~~~~~~~~~~~
/usr/include/zug/sequence.hpp:225:47: error: wrong number of template arguments (1, should be at least 2)
  225 |                       std::decay_t<RangeTs>...>
      |                                               ^
/usr/include/zug/sequence.hpp:158:8: note: provided for ‘template<class ValueT, class XformT, class ... RangeTs> struct zug::sequence_range’
  158 | struct sequence_range
      |        ^~~~~~~~~~~~~~
/usr/include/zug/sequence.hpp:225:47: error: wrong number of template arguments (1, should be at least 2)
  225 |                       std::decay_t<RangeTs>...>
      |                                               ^
/usr/include/zug/sequence.hpp:158:8: note: provided for ‘template<class ValueT, class XformT, class ... RangeTs> struct zug::sequence_range’
  158 | struct sequence_range
      |        ^~~~~~~~~~~~~~
/usr/include/zug/sequence.hpp:220:8: error: invalid template-id
  220 |     -> sequence_range<typename boost::mpl::eval_if<
      |        ^~~~~~~~~~~~~~
/usr/include/zug/sequence.hpp:220:32: error: ‘boost’ has not been declared
  220 |     -> sequence_range<typename boost::mpl::eval_if<
      |                                ^~~~~
/usr/include/zug/sequence.hpp:220:51: error: expected ‘(’ before ‘<’ token
  220 |     -> sequence_range<typename boost::mpl::eval_if<
      |                                                   ^
      |                                                   (
/usr/include/zug/sequence.hpp:221:74: error: expected primary-expression before ‘,’ token
  221 |                           std::is_same<ValueT, detail::deduce_value_type>,
      |                                                                          ^
/usr/include/zug/sequence.hpp:223:50: error: expected initializer before ‘::’ token
  223 |                           meta::identity<ValueT>>::type,
@tusooa
Copy link
Contributor Author

tusooa commented Jan 23, 2021

With ZUG_VARIANT_BOOST (succeeds):

tlcr: 0 2021,1,22 (5) 19,40,04 tusooa@tusooa-yoga /home/test/
] cat zug-test.cpp

#include <vector>
#define ZUG_VARIANT_BOOST 1
#include <boost/mpl/eval_if.hpp>
#include <zug/sequence.hpp>

int main()
{
    std::vector<int> foo;
    auto seq = zug::sequence(zug::identity, foo);
    for (auto i: seq) {
    }
}
tlcr: 0 2021,1,22 (5) 19,40,34 tusooa@tusooa-yoga /home/test/
] g++ -std=gnu++17 zug-test.cpp

Without ZUG_VARIANT_BOOST:

] cat zug-test.cpp

#include <vector>
#include <boost/mpl/eval_if.hpp>
#include <zug/sequence.hpp>

int main()
{
    std::vector<int> foo;
    auto seq = zug::sequence(zug::identity, foo);
    for (auto i: seq) {
    }
}
In file included from /usr/include/zug/skip.hpp:25,
                 from /usr/include/zug/reductor.hpp:11,
                 from /usr/include/zug/sequence.hpp:15,
                 from zug-test.cpp:4:
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant: In instantiation of ‘constexpr const size_t std::variant_size_v<zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > > >’:
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant:1014:10:   required from ‘struct std::__detail::__variant::__gen_vtable<true, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_traits<zug::skip_state<SkippedT, CalledT> >::complete(T&&) [with T = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >; SkippedT = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; CalledT = zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > >]::<lambda(auto:23&&)>&&, zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&&>’
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant:1638:23:   required from ‘constexpr decltype(auto) std::__do_visit(_Visitor&&, _Variants&& ...) [with bool __use_index = false; bool __same_return_types = true; _Visitor = zug::state_traits<zug::skip_state<SkippedT, CalledT> >::complete(T&&) [with T = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >; SkippedT = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; CalledT = zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > >]::<lambda(auto:23&&)>; _Variants = {zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >}]’
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant:1654:24:   required from ‘constexpr decltype(auto) std::visit(_Visitor&&, _Variants&& ...) [with _Visitor = zug::state_traits<zug::skip_state<SkippedT, CalledT> >::complete(T&&) [with T = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >; SkippedT = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; CalledT = zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > >]::<lambda(auto:23&&)>; _Variants = {zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >}]’
/usr/include/zug/skip.hpp:76:25:   required from ‘static decltype(auto) zug::state_traits<zug::skip_state<SkippedT, CalledT> >::complete(T&&) [with T = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >; SkippedT = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; CalledT = zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > >]’
/usr/include/zug/state_traits.hpp:103:39:   required from ‘decltype(auto) zug::state_complete(T&&) [with T = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >]’
/usr/include/zug/reductor.hpp:26:45:   required from ‘struct zug::reductor_base<zug::detail::caller<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)> [with auto:27 = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >::step_t]::<lambda(auto:28&&, auto:29&& ...)> >, zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > > >’
/usr/include/zug/reductor.hpp:179:8:   required from ‘struct zug::empty_reductor<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)> [with auto:27 = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >::step_t]::<lambda(auto:28&&, auto:29&& ...)>, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*>’
/usr/include/zug/sequence.hpp:126:20:   required from ‘struct zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >::<unnamed>’
/usr/include/zug/sequence.hpp:127:7:   required from ‘struct zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >’
/usr/include/zug/sequence.hpp:184:16:   required from ‘struct zug::sequence_range<int, zug::identity_t, std::vector<int, std::allocator<int> > >::iterator’
zug-test.cpp:10:18:   required from here
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant:94:29: error: incomplete type ‘std::variant_size<zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > > >’ used in nested name specifier
   94 |     inline constexpr size_t variant_size_v = variant_size<_Variant>::value;
      |                             ^~~~~~~~~~~~~~
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant: In instantiation of ‘constexpr decltype(auto) std::__do_visit(_Visitor&&, _Variants&& ...) [with bool __use_index = false; bool __same_return_types = true; _Visitor = zug::state_traits<zug::skip_state<SkippedT, CalledT> >::complete(T&&) [with T = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >; SkippedT = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; CalledT = zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > >]::<lambda(auto:23&&)>; _Variants = {zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >}]’:
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant:1654:24:   required from ‘constexpr decltype(auto) std::visit(_Visitor&&, _Variants&& ...) [with _Visitor = zug::state_traits<zug::skip_state<SkippedT, CalledT> >::complete(T&&) [with T = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >; SkippedT = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; CalledT = zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > >]::<lambda(auto:23&&)>; _Variants = {zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >}]’
/usr/include/zug/skip.hpp:76:25:   required from ‘static decltype(auto) zug::state_traits<zug::skip_state<SkippedT, CalledT> >::complete(T&&) [with T = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >; SkippedT = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; CalledT = zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > >]’
/usr/include/zug/state_traits.hpp:103:39:   required from ‘decltype(auto) zug::state_complete(T&&) [with T = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >]’
/usr/include/zug/reductor.hpp:26:45:   required from ‘struct zug::reductor_base<zug::detail::caller<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)> [with auto:27 = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >::step_t]::<lambda(auto:28&&, auto:29&& ...)> >, zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > > >’
/usr/include/zug/reductor.hpp:179:8:   required from ‘struct zug::empty_reductor<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)> [with auto:27 = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >::step_t]::<lambda(auto:28&&, auto:29&& ...)>, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*>’
/usr/include/zug/sequence.hpp:126:20:   required from ‘struct zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >::<unnamed>’
/usr/include/zug/sequence.hpp:127:7:   required from ‘struct zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >’
/usr/include/zug/sequence.hpp:184:16:   required from ‘struct zug::sequence_range<int, zug::identity_t, std::vector<int, std::allocator<int> > >::iterator’
zug-test.cpp:10:18:   required from here
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant:1638:23: error: ‘_S_vtable’ is not a member of ‘std::__detail::__variant::__gen_vtable<true, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_traits<zug::skip_state<SkippedT, CalledT> >::complete(T&&) [with T = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >; SkippedT = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; CalledT = zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > >]::<lambda(auto:23&&)>&&, zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&&>’
 1638 |       constexpr auto& __vtable = __detail::__variant::__gen_vtable<
      |                       ^~~~~~~~
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant: In instantiation of ‘constexpr decltype(auto) std::__do_visit(_Visitor&&, _Variants&& ...) [with bool __use_index = false; bool __same_return_types = true; _Visitor = zug::state_traits<zug::skip_state<SkippedT, CalledT> >::rewrap(T&&, U&&) [with T = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >; U = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; SkippedT = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; CalledT = zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > >]::<lambda(auto:25&&)>; _Variants = {zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >}]’:
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant:1654:24:   required from ‘constexpr decltype(auto) std::visit(_Visitor&&, _Variants&& ...) [with _Visitor = zug::state_traits<zug::skip_state<SkippedT, CalledT> >::rewrap(T&&, U&&) [with T = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >; U = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; SkippedT = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; CalledT = zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > >]::<lambda(auto:25&&)>; _Variants = {zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >}]’
/usr/include/zug/skip.hpp:92:25:   required from ‘static decltype(auto) zug::state_traits<zug::skip_state<SkippedT, CalledT> >::rewrap(T&&, U&&) [with T = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >; U = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; SkippedT = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; CalledT = zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > >]’
/usr/include/zug/state_traits.hpp:148:37:   required from ‘decltype(auto) zug::state_rewrap(T&&, U&&) [with T = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >; U = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*]’
/usr/include/zug/reductor.hpp:55:30:   required from ‘void zug::reductor_base<ReducingFnT, StateT, InputTs>::current(T&&) [with T = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; ReducingFnT = zug::detail::caller<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)> [with auto:27 = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >::step_t]::<lambda(auto:28&&, auto:29&& ...)> >; StateT = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >; InputTs = {}]’
/usr/include/zug/sequence.hpp:63:9:   required from ‘zug::detail::sequence_data<ValueT, XformT>::sequence_data(zug::detail::sequence_data<ValueT, XformT>&&) [with ValueT = int; XformT = zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t>]’
/usr/include/zug/sequence.hpp:176:36:   required from ‘zug::sequence_range<ValueT, XformT, RangeTs>::iterator::iterator(zug::sequence_range<ValueT, XformT, RangeTs>::data_t) [with ValueT = int; XformT = zug::identity_t; RangeTs = {std::vector<int, std::allocator<int> >}; zug::sequence_range<ValueT, XformT, RangeTs>::data_t = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >; decltype (zug::comp(zug::iter(zug::detail::make_iterator_range((declval<const RangeTs&>)())...), declval<XformT>())) = zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t>]’
/usr/include/zug/sequence.hpp:194:44:   required from ‘zug::sequence_range<ValueT, XformT, RangeTs>::iterator zug::sequence_range<ValueT, XformT, RangeTs>::begin() const [with ValueT = int; XformT = zug::identity_t; RangeTs = {std::vector<int, std::allocator<int> >}]’
zug-test.cpp:10:18:   required from here
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant:1638:23: error: ‘_S_vtable’ is not a member of ‘std::__detail::__variant::__gen_vtable<true, zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >, zug::state_traits<zug::skip_state<SkippedT, CalledT> >::rewrap(T&&, U&&) [with T = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >; U = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; SkippedT = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; CalledT = zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > >]::<lambda(auto:25&&)>&&, zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&&>’
In file included from /usr/include/zug/sequence.hpp:15,
                 from zug-test.cpp:4:
/usr/include/zug/reductor.hpp: In instantiation of ‘void zug::reductor_base<ReducingFnT, StateT, InputTs>::current(T&&) [with T = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; ReducingFnT = zug::detail::caller<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)> [with auto:27 = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >::step_t]::<lambda(auto:28&&, auto:29&& ...)> >; StateT = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >; InputTs = {}]’:
/usr/include/zug/sequence.hpp:63:9:   required from ‘zug::detail::sequence_data<ValueT, XformT>::sequence_data(zug::detail::sequence_data<ValueT, XformT>&&) [with ValueT = int; XformT = zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t>]’
/usr/include/zug/sequence.hpp:176:36:   required from ‘zug::sequence_range<ValueT, XformT, RangeTs>::iterator::iterator(zug::sequence_range<ValueT, XformT, RangeTs>::data_t) [with ValueT = int; XformT = zug::identity_t; RangeTs = {std::vector<int, std::allocator<int> >}; zug::sequence_range<ValueT, XformT, RangeTs>::data_t = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >; decltype (zug::comp(zug::iter(zug::detail::make_iterator_range((declval<const RangeTs&>)())...), declval<XformT>())) = zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t>]’
/usr/include/zug/sequence.hpp:194:44:   required from ‘zug::sequence_range<ValueT, XformT, RangeTs>::iterator zug::sequence_range<ValueT, XformT, RangeTs>::begin() const [with ValueT = int; XformT = zug::identity_t; RangeTs = {std::vector<int, std::allocator<int> >}]’
zug-test.cpp:10:18:   required from here
/usr/include/zug/reductor.hpp:55:16: error: no match for ‘operator=’ (operand types are ‘zug::reductor_base<zug::detail::caller<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)> [with auto:27 = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >::step_t]::<lambda(auto:28&&, auto:29&& ...)> >, zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > > >::state_type’ {aka ‘zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >’} and ‘void’)
   55 |         state_ = state_rewrap(std::move(state_), std::forward<T>(x));
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/zug/reductor.hpp:11,
                 from /usr/include/zug/sequence.hpp:15,
                 from zug-test.cpp:4:
/usr/include/zug/skip.hpp:46:8: note: candidate: ‘zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >& zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >::operator=(const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&)’
   46 | struct skip_state : ZUG_VARIANT<SkippedT, CalledT>
      |        ^~~~~~~~~~
/usr/include/zug/skip.hpp:46:8: note:   no known conversion for argument 1 from ‘void’ to ‘const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&’
/usr/include/zug/skip.hpp:46:8: note: candidate: ‘zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >& zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >::operator=(zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&&)’
/usr/include/zug/skip.hpp:46:8: note:   no known conversion for argument 1 from ‘void’ to ‘zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&&’
In file included from /usr/include/zug/skip.hpp:25,
                 from /usr/include/zug/reductor.hpp:11,
                 from /usr/include/zug/sequence.hpp:15,
                 from zug-test.cpp:4:
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant: In instantiation of ‘struct std::variant_size<const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > > >’:
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant:94:29:   required from ‘constexpr const size_t std::variant_size_v<const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > > >’
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant:1014:10:   required from ‘struct std::__detail::__variant::__gen_vtable<true, bool, zug::state_traits<zug::skip_state<SkippedT, CalledT> >::is_reduced(T&&) [with T = const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&; SkippedT = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; CalledT = zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > >]::<lambda(auto:22&&)>&&, const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&>’
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant:1638:23:   required from ‘constexpr decltype(auto) std::__do_visit(_Visitor&&, _Variants&& ...) [with bool __use_index = false; bool __same_return_types = true; _Visitor = zug::state_traits<zug::skip_state<SkippedT, CalledT> >::is_reduced(T&&) [with T = const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&; SkippedT = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; CalledT = zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > >]::<lambda(auto:22&&)>; _Variants = {const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&}]’
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant:1654:24:   required from ‘constexpr decltype(auto) std::visit(_Visitor&&, _Variants&& ...) [with _Visitor = zug::state_traits<zug::skip_state<SkippedT, CalledT> >::is_reduced(T&&) [with T = const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&; SkippedT = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; CalledT = zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > >]::<lambda(auto:22&&)>; _Variants = {const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&}]’
/usr/include/zug/skip.hpp:69:25:   required from ‘static decltype(auto) zug::state_traits<zug::skip_state<SkippedT, CalledT> >::is_reduced(T&&) [with T = const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&; SkippedT = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; CalledT = zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > >]’
/usr/include/zug/state_traits.hpp:112:41:   required from ‘bool zug::state_is_reduced(T&&) [with T = const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&]’
/usr/include/zug/reductor.hpp:33:62:   required from ‘zug::reductor_base<ReducingFnT, StateT, InputTs>::operator bool() const [with ReducingFnT = zug::detail::caller<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)> [with auto:27 = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >::step_t]::<lambda(auto:28&&, auto:29&& ...)> >; StateT = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >; InputTs = {}]’
/usr/include/zug/sequence.hpp:116:40:   required from ‘void zug::detail::sequence_data<ValueT, XformT>::pull() [with ValueT = int; XformT = zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t>]’
/usr/include/zug/sequence.hpp:53:9:   required from ‘zug::detail::sequence_data<ValueT, XformT>::sequence_data(const XformT&) [with ValueT = int; XformT = zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t>]’
/usr/include/zug/sequence.hpp:194:44:   required from ‘zug::sequence_range<ValueT, XformT, RangeTs>::iterator zug::sequence_range<ValueT, XformT, RangeTs>::begin() const [with ValueT = int; XformT = zug::identity_t; RangeTs = {std::vector<int, std::allocator<int> >}]’
zug-test.cpp:10:18:   required from here
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant:81:12: error: invalid use of incomplete type ‘struct std::variant_size<zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > > >’
   81 |     struct variant_size<const _Variant> : variant_size<_Variant> {};
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant:78:12: note: declaration of ‘struct std::variant_size<zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > > >’
   78 |     struct variant_size;
      |            ^~~~~~~~~~~~
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant: In instantiation of ‘constexpr const size_t std::variant_size_v<const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > > >’:
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant:1014:10:   required from ‘struct std::__detail::__variant::__gen_vtable<true, bool, zug::state_traits<zug::skip_state<SkippedT, CalledT> >::is_reduced(T&&) [with T = const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&; SkippedT = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; CalledT = zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > >]::<lambda(auto:22&&)>&&, const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&>’
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant:1638:23:   required from ‘constexpr decltype(auto) std::__do_visit(_Visitor&&, _Variants&& ...) [with bool __use_index = false; bool __same_return_types = true; _Visitor = zug::state_traits<zug::skip_state<SkippedT, CalledT> >::is_reduced(T&&) [with T = const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&; SkippedT = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; CalledT = zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > >]::<lambda(auto:22&&)>; _Variants = {const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&}]’
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant:1654:24:   required from ‘constexpr decltype(auto) std::visit(_Visitor&&, _Variants&& ...) [with _Visitor = zug::state_traits<zug::skip_state<SkippedT, CalledT> >::is_reduced(T&&) [with T = const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&; SkippedT = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; CalledT = zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > >]::<lambda(auto:22&&)>; _Variants = {const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&}]’
/usr/include/zug/skip.hpp:69:25:   required from ‘static decltype(auto) zug::state_traits<zug::skip_state<SkippedT, CalledT> >::is_reduced(T&&) [with T = const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&; SkippedT = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; CalledT = zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > >]’
/usr/include/zug/state_traits.hpp:112:41:   required from ‘bool zug::state_is_reduced(T&&) [with T = const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&]’
/usr/include/zug/reductor.hpp:33:62:   required from ‘zug::reductor_base<ReducingFnT, StateT, InputTs>::operator bool() const [with ReducingFnT = zug::detail::caller<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)> [with auto:27 = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >::step_t]::<lambda(auto:28&&, auto:29&& ...)> >; StateT = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >; InputTs = {}]’
/usr/include/zug/sequence.hpp:116:40:   required from ‘void zug::detail::sequence_data<ValueT, XformT>::pull() [with ValueT = int; XformT = zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t>]’
/usr/include/zug/sequence.hpp:53:9:   required from ‘zug::detail::sequence_data<ValueT, XformT>::sequence_data(const XformT&) [with ValueT = int; XformT = zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t>]’
/usr/include/zug/sequence.hpp:194:44:   required from ‘zug::sequence_range<ValueT, XformT, RangeTs>::iterator zug::sequence_range<ValueT, XformT, RangeTs>::begin() const [with ValueT = int; XformT = zug::identity_t; RangeTs = {std::vector<int, std::allocator<int> >}]’
zug-test.cpp:10:18:   required from here
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant:94:29: error: ‘value’ is not a member of ‘std::variant_size<const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > > >’
   94 |     inline constexpr size_t variant_size_v = variant_size<_Variant>::value;
      |                             ^~~~~~~~~~~~~~
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant: In instantiation of ‘constexpr decltype(auto) std::__do_visit(_Visitor&&, _Variants&& ...) [with bool __use_index = false; bool __same_return_types = true; _Visitor = zug::state_traits<zug::skip_state<SkippedT, CalledT> >::is_reduced(T&&) [with T = const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&; SkippedT = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; CalledT = zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > >]::<lambda(auto:22&&)>; _Variants = {const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&}]’:
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant:1654:24:   required from ‘constexpr decltype(auto) std::visit(_Visitor&&, _Variants&& ...) [with _Visitor = zug::state_traits<zug::skip_state<SkippedT, CalledT> >::is_reduced(T&&) [with T = const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&; SkippedT = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; CalledT = zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > >]::<lambda(auto:22&&)>; _Variants = {const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&}]’
/usr/include/zug/skip.hpp:69:25:   required from ‘static decltype(auto) zug::state_traits<zug::skip_state<SkippedT, CalledT> >::is_reduced(T&&) [with T = const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&; SkippedT = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; CalledT = zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > >]’
/usr/include/zug/state_traits.hpp:112:41:   required from ‘bool zug::state_is_reduced(T&&) [with T = const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&]’
/usr/include/zug/reductor.hpp:33:62:   required from ‘zug::reductor_base<ReducingFnT, StateT, InputTs>::operator bool() const [with ReducingFnT = zug::detail::caller<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)> [with auto:27 = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >::step_t]::<lambda(auto:28&&, auto:29&& ...)> >; StateT = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >; InputTs = {}]’
/usr/include/zug/sequence.hpp:116:40:   required from ‘void zug::detail::sequence_data<ValueT, XformT>::pull() [with ValueT = int; XformT = zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t>]’
/usr/include/zug/sequence.hpp:53:9:   required from ‘zug::detail::sequence_data<ValueT, XformT>::sequence_data(const XformT&) [with ValueT = int; XformT = zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t>]’
/usr/include/zug/sequence.hpp:194:44:   required from ‘zug::sequence_range<ValueT, XformT, RangeTs>::iterator zug::sequence_range<ValueT, XformT, RangeTs>::begin() const [with ValueT = int; XformT = zug::identity_t; RangeTs = {std::vector<int, std::allocator<int> >}]’
zug-test.cpp:10:18:   required from here
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant:1638:23: error: ‘_S_vtable’ is not a member of ‘std::__detail::__variant::__gen_vtable<true, bool, zug::state_traits<zug::skip_state<SkippedT, CalledT> >::is_reduced(T&&) [with T = const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&; SkippedT = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*; CalledT = zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > >]::<lambda(auto:22&&)>&&, const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&>’
 1638 |       constexpr auto& __vtable = __detail::__variant::__gen_vtable<
      |                       ^~~~~~~~
In file included from /usr/include/zug/detail/reduce_nested_non_empty_nullary.hpp:11,
                 from /usr/include/zug/detail/reduce_nested_non_empty.hpp:13,
                 from /usr/include/zug/reduce.hpp:12,
                 from /usr/include/zug/transduce.hpp:11,
                 from /usr/include/zug/into.hpp:13,
                 from /usr/include/zug/meta.hpp:11,
                 from /usr/include/zug/sequence.hpp:13,
                 from zug-test.cpp:4:
/usr/include/zug/state_traits.hpp: In instantiation of ‘bool zug::state_is_reduced(T&&) [with T = const zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&]’:
/usr/include/zug/reductor.hpp:33:62:   required from ‘zug::reductor_base<ReducingFnT, StateT, InputTs>::operator bool() const [with ReducingFnT = zug::detail::caller<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)> [with auto:27 = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >::step_t]::<lambda(auto:28&&, auto:29&& ...)> >; StateT = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >; InputTs = {}]’
/usr/include/zug/sequence.hpp:116:40:   required from ‘void zug::detail::sequence_data<ValueT, XformT>::pull() [with ValueT = int; XformT = zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t>]’
/usr/include/zug/sequence.hpp:53:9:   required from ‘zug::detail::sequence_data<ValueT, XformT>::sequence_data(const XformT&) [with ValueT = int; XformT = zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t>]’
/usr/include/zug/sequence.hpp:194:44:   required from ‘zug::sequence_range<ValueT, XformT, RangeTs>::iterator zug::sequence_range<ValueT, XformT, RangeTs>::begin() const [with ValueT = int; XformT = zug::identity_t; RangeTs = {std::vector<int, std::allocator<int> >}]’
zug-test.cpp:10:18:   required from here
/usr/include/zug/state_traits.hpp:112:41: error: void value not ignored as it ought to be
  112 |     return state_traits_t<T>::is_reduced(std::forward<T>(s));
      |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/zug/skip.hpp:25,
                 from /usr/include/zug/reductor.hpp:11,
                 from /usr/include/zug/sequence.hpp:15,
                 from zug-test.cpp:4:
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant: In instantiation of ‘constexpr decltype(auto) std::__do_visit(_Visitor&&, _Variants&& ...) [with bool __use_index = false; bool __same_return_types = true; _Visitor = zug::call(ReducingFnT&&, StateT&&, InputTs&& ...) [with ReducingFnT = zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)> [with auto:27 = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >::step_t]::<lambda(auto:28&&, auto:29&& ...)>&; StateT = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >; InputTs = {}; std::enable_if_t<zug::is_skip_state<typename std::decay<Rhs>::type>{}, typename std::decay<Rhs>::type> = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >]::<lambda(auto:26&&)>; _Variants = {zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >}]’:
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant:1654:24:   required from ‘constexpr decltype(auto) std::visit(_Visitor&&, _Variants&& ...) [with _Visitor = zug::call(ReducingFnT&&, StateT&&, InputTs&& ...) [with ReducingFnT = zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)> [with auto:27 = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >::step_t]::<lambda(auto:28&&, auto:29&& ...)>&; StateT = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >; InputTs = {}; std::enable_if_t<zug::is_skip_state<typename std::decay<Rhs>::type>{}, typename std::decay<Rhs>::type> = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >]::<lambda(auto:26&&)>; _Variants = {zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >}]’
/usr/include/zug/skip.hpp:210:21:   required from ‘std::enable_if_t<zug::is_skip_state<typename std::decay<Rhs>::type>{}, typename std::decay<Rhs>::type> zug::call(ReducingFnT&&, StateT&&, InputTs&& ...) [with ReducingFnT = zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)> [with auto:27 = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >::step_t]::<lambda(auto:28&&, auto:29&& ...)>&; StateT = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >; InputTs = {}; std::enable_if_t<zug::is_skip_state<typename std::decay<Rhs>::type>{}, typename std::decay<Rhs>::type> = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >]’
/usr/include/zug/reductor.hpp:165:20:   required from ‘decltype(auto) zug::detail::caller<ReducingFnT>::operator()(Args&& ...) [with Args = {zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >}; ReducingFnT = zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)> [with auto:27 = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >::step_t]::<lambda(auto:28&&, auto:29&& ...)>]’
/usr/include/zug/reductor.hpp:70:14:   required from ‘zug::reductor_base<ReducingFnT, StateT, InputTs>& zug::reductor_base<ReducingFnT, StateT, InputTs>::operator()(InputTs2&& ...) & [with InputTs2 = {}; ReducingFnT = zug::detail::caller<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)> [with auto:27 = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >::step_t]::<lambda(auto:28&&, auto:29&& ...)> >; StateT = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >; InputTs = {}]’
/usr/include/zug/sequence.hpp:117:17:   required from ‘void zug::detail::sequence_data<ValueT, XformT>::pull() [with ValueT = int; XformT = zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t>]’
/usr/include/zug/sequence.hpp:53:9:   required from ‘zug::detail::sequence_data<ValueT, XformT>::sequence_data(const XformT&) [with ValueT = int; XformT = zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t>]’
/usr/include/zug/sequence.hpp:194:44:   required from ‘zug::sequence_range<ValueT, XformT, RangeTs>::iterator zug::sequence_range<ValueT, XformT, RangeTs>::begin() const [with ValueT = int; XformT = zug::identity_t; RangeTs = {std::vector<int, std::allocator<int> >}]’
zug-test.cpp:10:18:   required from here
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/variant:1638:23: error: ‘_S_vtable’ is not a member of ‘std::__detail::__variant::__gen_vtable<true, zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >, zug::call(ReducingFnT&&, StateT&&, InputTs&& ...) [with ReducingFnT = zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)> [with auto:27 = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >::step_t]::<lambda(auto:28&&, auto:29&& ...)>&; StateT = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >; InputTs = {}; std::enable_if_t<zug::is_skip_state<typename std::decay<Rhs>::type>{}, typename std::decay<Rhs>::type> = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >]::<lambda(auto:26&&)>&&, zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >&&>’
 1638 |       constexpr auto& __vtable = __detail::__variant::__gen_vtable<
      |                       ^~~~~~~~
In file included from /usr/include/zug/reductor.hpp:11,
                 from /usr/include/zug/sequence.hpp:15,
                 from zug-test.cpp:4:
/usr/include/zug/skip.hpp: In instantiation of ‘std::enable_if_t<zug::is_skip_state<typename std::decay<Rhs>::type>{}, typename std::decay<Rhs>::type> zug::call(ReducingFnT&&, StateT&&, InputTs&& ...) [with ReducingFnT = zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)> [with auto:27 = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >::step_t]::<lambda(auto:28&&, auto:29&& ...)>&; StateT = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >; InputTs = {}; std::enable_if_t<zug::is_skip_state<typename std::decay<Rhs>::type>{}, typename std::decay<Rhs>::type> = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >]’:
/usr/include/zug/reductor.hpp:165:20:   required from ‘decltype(auto) zug::detail::caller<ReducingFnT>::operator()(Args&& ...) [with Args = {zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >}; ReducingFnT = zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)> [with auto:27 = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >::step_t]::<lambda(auto:28&&, auto:29&& ...)>]’
/usr/include/zug/reductor.hpp:70:14:   required from ‘zug::reductor_base<ReducingFnT, StateT, InputTs>& zug::reductor_base<ReducingFnT, StateT, InputTs>::operator()(InputTs2&& ...) & [with InputTs2 = {}; ReducingFnT = zug::detail::caller<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)> [with auto:27 = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >::step_t]::<lambda(auto:28&&, auto:29&& ...)> >; StateT = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >; InputTs = {}]’
/usr/include/zug/sequence.hpp:117:17:   required from ‘void zug::detail::sequence_data<ValueT, XformT>::pull() [with ValueT = int; XformT = zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t>]’
/usr/include/zug/sequence.hpp:53:9:   required from ‘zug::detail::sequence_data<ValueT, XformT>::sequence_data(const XformT&) [with ValueT = int; XformT = zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t>]’
/usr/include/zug/sequence.hpp:194:44:   required from ‘zug::sequence_range<ValueT, XformT, RangeTs>::iterator zug::sequence_range<ValueT, XformT, RangeTs>::begin() const [with ValueT = int; XformT = zug::identity_t; RangeTs = {std::vector<int, std::allocator<int> >}]’
zug-test.cpp:10:18:   required from here
/usr/include/zug/skip.hpp:210:21: error: could not convert ‘std::visit<zug::call(ReducingFnT&&, StateT&&, InputTs&& ...) [with ReducingFnT = zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)> [with auto:27 = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >::step_t]::<lambda(auto:28&&, auto:29&& ...)>&; StateT = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >; InputTs = {}; std::enable_if_t<zug::is_skip_state<typename std::decay<Rhs>::type>{}, typename std::decay<Rhs>::type> = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >]::<lambda(auto:26&&)>, zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > > >(<lambda closure object>zug::call(ReducingFnT&&, StateT&&, InputTs&& ...) [with ReducingFnT = zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)> [with auto:27 = zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >::step_t]::<lambda(auto:28&&, auto:29&& ...)>&; StateT = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >; InputTs = {}; std::enable_if_t<zug::is_skip_state<typename std::decay<Rhs>::type>{}, typename std::decay<Rhs>::type> = zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >]::<lambda(auto:26&&)>{(* & step)}, (* & std::forward<zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > > >((* & state))))’ from ‘void’ to ‘std::enable_if_t<true, zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > > >’ {aka ‘zug::skip_state<zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, zug::state_wrapper<zug::iter_tag, zug::detail::sequence_data<int, zug::composed<zug::iter(InputRangeT&&) [with InputRangeT = zug::detail::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, __gnu_cxx::__normal_iterator<const int*, std::vector<int> > >]::<lambda(auto:27&&)>, zug::identity_t> >*, std::tuple<__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > > > > >’}
  210 |     return ZUG_VISIT(
      |                     ^
      |                     |
      |                     void

Without boost/mpl include:

tlcr: 1 2021,1,22 (5) 19,44,21 tusooa@tusooa-yoga /home/test/
] cat zug-test.cpp

#include <vector>
#include <zug/sequence.hpp>

int main()
{
    std::vector<int> foo;
    auto seq = zug::sequence(zug::identity, foo);
    for (auto i: seq) {
    }
}
tlcr: 0 2021,1,22 (5) 19,44,26 tusooa@tusooa-yoga /home/test/
] g++ -std=gnu++17 zug-test.cpp
In file included from zug-test.cpp:3:
/usr/include/zug/sequence.hpp:225:47: error: wrong number of template arguments (1, should be at least 2)
  225 |                       std::decay_t<RangeTs>...>
      |                                               ^
/usr/include/zug/sequence.hpp:158:8: note: provided for ‘template<class ValueT, class XformT, class ... RangeTs> struct zug::sequence_range’
  158 | struct sequence_range
      |        ^~~~~~~~~~~~~~
/usr/include/zug/sequence.hpp:225:47: error: wrong number of template arguments (1, should be at least 2)
  225 |                       std::decay_t<RangeTs>...>
      |                                               ^
/usr/include/zug/sequence.hpp:158:8: note: provided for ‘template<class ValueT, class XformT, class ... RangeTs> struct zug::sequence_range’
  158 | struct sequence_range
      |        ^~~~~~~~~~~~~~
/usr/include/zug/sequence.hpp:225:47: error: wrong number of template arguments (1, should be at least 2)
  225 |                       std::decay_t<RangeTs>...>
      |                                               ^
/usr/include/zug/sequence.hpp:158:8: note: provided for ‘template<class ValueT, class XformT, class ... RangeTs> struct zug::sequence_range’
  158 | struct sequence_range
      |        ^~~~~~~~~~~~~~
/usr/include/zug/sequence.hpp:225:47: error: wrong number of template arguments (1, should be at least 2)
  225 |                       std::decay_t<RangeTs>...>
      |                                               ^
/usr/include/zug/sequence.hpp:158:8: note: provided for ‘template<class ValueT, class XformT, class ... RangeTs> struct zug::sequence_range’
  158 | struct sequence_range
      |        ^~~~~~~~~~~~~~
/usr/include/zug/sequence.hpp:220:8: error: invalid template-id
  220 |     -> sequence_range<typename boost::mpl::eval_if<
      |        ^~~~~~~~~~~~~~
/usr/include/zug/sequence.hpp:220:32: error: ‘boost’ has not been declared
  220 |     -> sequence_range<typename boost::mpl::eval_if<
      |                                ^~~~~
/usr/include/zug/sequence.hpp:220:51: error: expected ‘(’ before ‘<’ token
  220 |     -> sequence_range<typename boost::mpl::eval_if<
      |                                                   ^
      |                                                   (
/usr/include/zug/sequence.hpp:221:74: error: expected primary-expression before ‘,’ token
  221 |                           std::is_same<ValueT, detail::deduce_value_type>,
      |                                                                          ^
/usr/include/zug/sequence.hpp:223:50: error: expected initializer before ‘::’ token
  223 |                           meta::identity<ValueT>>::type,
      |                                                  ^~
zug-test.cpp: In function ‘int main()’:
zug-test.cpp:8:21: error: ‘sequence’ is not a member of ‘zug’
    8 |     auto seq = zug::sequence(zug::identity, foo);
      |                     ^~~~~~~~

@tusooa tusooa changed the title sequence depends on boost::mpl but without including it Build failure when using std::variant Jan 23, 2021
@Yohsi
Copy link

Yohsi commented Apr 22, 2021

This seems to be an issue with gcc (or even with the C++ standard?) that doesn't allow std::visit to be applied on a class inherited from std::variant.
See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90943 and https://stackoverflow.com/questions/51309467/using-stdvisit-on-a-class-inheriting-from-stdvariant-libstdc-vs-libc

@arximboldi arximboldi added the bug Something isn't working label Jan 17, 2022
jacktony980 pushed a commit to jacktony980/sendingcpp that referenced this issue May 15, 2023
zug can't be built with std::variant for now.
See: arximboldi/zug#24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants