[sigc] Expected results of tests/test_functor_traits and visit_each behavior?
- From: Ryan Beasley <rbeasley vmware com>
- To: libsigc-list gnome org
- Subject: [sigc] Expected results of tests/test_functor_traits and visit_each behavior?
- Date: Mon, 17 Feb 2014 17:16:44 -0800 (PST)
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
[Date Prev][
Date Next] [Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]