Opened 9 years ago
Last modified 9 years ago
#9112 new Bugs
[tr1] Failures in test_ref_wrapper_tricky.cpp
Reported by: | Owned by: | Peter Dimov | |
---|---|---|---|
Milestone: | To Be Determined | Component: | result_of |
Version: | Boost 1.54.0 | Severity: | Problem |
Keywords: | Cc: |
Description
The mentioned test case gives a number of failures. Those can be tracked down to two problems (at least the test case perceives them as problems). Google gives hits dating this back to 1.37, I have confirmed it with 1.41 and 1.54. I'm not sure why this hasn't been addressed--have I inadvertently opened a can of worms?
First, reference_wrapper that wraps function-like objects doesn't derive off std::unary_function, resp. std::binary function. That's relatively easy to fix by introducing a reference_wrapper_base class template, that reference_wrapper inherits off. That template optionally derives off unary_ or binary_function as appropriate.
Second, calling reference wrapper as function doesn't work for member functions. This can be solved by introducing operator() in the above mentioned base class.
I'll attach a patch that implements the above, except for specializations for reference_wrapper<{binary,unary}_function>. Please let me know whether a patch to this effect would be applicable and advise on areas that need more work.
Attachments (1)
Change History (3)
by , 9 years ago
Attachment: | boost-0.41.0-tr1-ref.patch added |
---|
comment:1 by , 9 years ago
The errors reported by the test case look like this:
gcc.compile.c++ ../../../bin.v2/libs/tr1/test/test_ref_wrapper_tricky.test/gcc-4.6.3/debug/test_ref_wrapper_tricky.o test_ref_wrapper_tricky.cpp: In function 'int main()': test_ref_wrapper_tricky.cpp:42:220: error: invalid application of 'sizeof' to incomplete type 'boost::STATIC_ASSERTION_FAILURE<false>' test_ref_wrapper_tricky.cpp:42:221: error: template argument 1 is invalid test_ref_wrapper_tricky.cpp:42:254: error: invalid type in declaration before ';' token test_ref_wrapper_tricky.cpp:48:227: error: invalid application of 'sizeof' to incomplete type 'boost::STATIC_ASSERTION_FAILURE<false>' test_ref_wrapper_tricky.cpp:48:228: error: template argument 1 is invalid test_ref_wrapper_tricky.cpp:48:261: error: invalid type in declaration before ';' token test_ref_wrapper_tricky.cpp:64:34: error: no match for call to '(boost::reference_wrapper<functor1>) (int&)' test_ref_wrapper_tricky.cpp:75:41: error: no match for call to '(boost::reference_wrapper<functor2>) (int&, int&)' test_ref_wrapper_tricky.cpp:79:9: warning: unused variable 'ri' [-Wunused-variable] test_ref_wrapper_tricky.cpp:80:15: warning: unused variable 'cri' [-Wunused-variable]
Those two are from the unary_function and binary_function specializations that I haven't fixed, as mentioned above.
comment:2 by , 9 years ago
Component: | TR1 → result_of |
---|---|
Owner: | changed from | to
Reassigning as this is an issue with Boost.Ref not really TR1.
Proposed patch.