2014-02-18 02:16, Ryan Beasley skrev:
The test looks wrong. You mention a patch. Can you show what you've modified? Perhaps you can attach your patch to your bug 724496. Or file another bug, it you think this error is unrelated to the one in bug 724496.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 _______________________________________________ |