Hi all,
I'm observing some odd behavior with one of libsigc++'s tests, and I'm
wondering whether there's a problem with my patch or the test itself.
====
sigc::visit_each(
print(),
sigc::compose( > A
sigc::bind(sigc::ptr_fun3(&foo), \
sigc::ref(a), > B
i), /
sigc::ptr_fun1(&bar))); > C
util->check_result(result_stream, "hit all targets: other other ");
====
It appears that unmodified visit_each doesn't dig into sigc::compose's
parameters, so it fails to visit each of the leaf types individually. With my
patch, I'm observing different visitor output, but which I believe to be
correct.
Expected "hit all targets: other other "
Got "hit all targets: other trackable int: 1other "
So, who's wrong? Me, the test, or both?
====
Type of A
---------
sigc::compose1_functor<B, C>
Visiting results in
visit_each<T_action, B>(_A_action, _A_target.functor_);
(_A_target.functor_ is instance of B.)
visit_each<T_action, C>(_A_action, _A_target.get_); (_A_target.get_ is
instance of C.)
Type of B
---------
sigc::bind_functor<
-1,
sigc::pointer_functor3<int, int, int, void>, > type D
sigc::reference_wrapper<{anonymous}::A>, > type E
int, (5 sigc::nils)>
Visiting results in
visit_each<T_action, sigc::pointer_functor3<int, int, int, void>
>(_A_action, _A_target.functor_);
visit_each<T_action, sigc::reference_wrapper<{anonymous}::A> >(_A_action,
_A_target.bound1_);
visit_each<T_action, int>(T_action, _A_target.bound2_);
Visiting type D leads to
print<D> -> "other"
Visiting type E leads to
visit_each<{anonymous}::print,
sigc::bound_argument<sigc::reference_wrapper<{anonymous}::A> > >
\--- visit_each<{anonymous}::print, sigc::limit_reference<{anonymous}::A,
false> >
\--- visit_each<{anonymous}::print, {anonymous}::A>
\--- with_trackable<::A, true> -> "trackable"
Visiting int leads to
print<int> -> "int 1"
Type of C
---------
sigc::pointer_functor1<int, void>
Visiting results in
visit_each<T_action, sigc::pointer_functor1<int, void> >(_A_action,
_A_target.functor_);
print<C> -> "other"
1. https://bugzilla.gnome.org/show_bug.cgi?id=724496
_______________________________________________
libsigc-list mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/libsigc-list