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 libsigc-list@gnome.org https://mail.gnome.org/mailman/listinfo/libsigc-list