2014-02-18 02:16, Ryan Beasley skrev:
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?
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.
====
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

Reply via email to