Boost logo

Boost Users :

Subject: Re: [Boost-users] boost::result_of template
From: John M. Dlugosz (mpbecey7gu_at_[hidden])
Date: 2012-04-13 10:35:24


The plot thickens:

        class Universe : std::tr1::enable_shared_from_this<Universe> {
           const int answer;
        public:
           Universe (int a) : answer(a) {}
           std::string get_answer() const;
           void get_nothing() {}
           virtual void blahblah(); // !!!
           };

        Universe u1(42);
        foo (&Universe::get_answer, &u1);

Regarding my previous post on the definitions of foo,
if the class inherits from enable_shared_from this *and* contains a virtual function, then
this call to foo doesn't work, giving funny template errors in boost::result_of.

2>E:\boost_1_49\boost/utility/result_of.hpp(82): error C2825: 'F': must be a class or
namespace when followed by '::'
2> E:\boost_1_49\boost/utility/result_of.hpp(90) : see reference to class
template instantiation 'boost::detail::result_of_nested_result<F,FArgs>' being compiled
2> with
2> [
2> F=std::basic_string<char,std::char_traits<char>,std::allocator<char>>
(__thiscall thread_pool_tests::Universe::* &)(void) const,
2> FArgs=std::basic_string<char,std::char_traits<char>,std::allocator<char>>
(__thiscall thread_pool_tests::Universe::* &(thread_pool_tests::Universe *))(void) const
2> ]
2> E:\boost_1_49\boost/utility/detail/result_of_iterate.hpp(33) : see reference
to class template instantiation 'boost::detail::tr1_result_of_impl<F,FArgs,HasResultType>'
being compiled
2> with
2> [
2> F=std::basic_string<char,std::char_traits<char>,std::allocator<char>>
(__thiscall thread_pool_tests::Universe::* &)(void) const,
2> FArgs=std::basic_string<char,std::char_traits<char>,std::allocator<char>>
(__thiscall thread_pool_tests::Universe::* &(thread_pool_tests::Universe *))(void) const,
2> HasResultType=false
2> ]
2> E:\boost_1_49\boost/utility/detail/result_of_iterate.hpp(75) : see reference
to class template instantiation 'boost::tr1_result_of<F>' being compiled
2> with
2> [
2> F=std::basic_string<char,std::char_traits<char>,std::allocator<char>>
(__thiscall thread_pool_tests::Universe::* &(thread_pool_tests::Universe *))(void) const
2> ]
2> threadpoolTest.cpp(78) : see reference to class template instantiation
'boost::result_of<F>' being compiled
2> with
2> [
2> F=std::string (__thiscall thread_pool_tests::Universe::*
&(thread_pool_tests::Universe *))(void) const
2> ]
2>E:\boost_1_49\boost/utility/result_of.hpp(82): error C2516: 'F' : is not a legal base class
2> E:\boost_1_49\boost/utility/result_of.hpp(90) : see declaration of 'F'
2>E:\boost_1_49\boost/utility/result_of.hpp(82): error C2143: syntax error : missing ','
before '::'
2>E:\boost_1_49\boost/utility/result_of.hpp(82): error C2903: 'result' : symbol is neither
a class template nor a function template
2>E:\boost_1_49\boost/utility/result_of.hpp(82): error C2039: 'result' : is not a member
of '`global namespace''
2>E:\boost_1_49\boost/utility/result_of.hpp(82): error C2504: 'result' : base class undefined
2>E:\boost_1_49\boost/utility/result_of.hpp(82): error C2143: syntax error : missing ','
before '<'
2>threadpoolTest.cpp(78): error C2780:
'boost::unique_future<boost::result_of<F(T0,T1)>::type> foo(F &&,A1 &&,A2 &&)' : expects 3
arguments - 2 provided
2> V⋯.h(243) : see declaration of 'vst::async'
2>threadpoolTest.cpp(78): error C2893: Failed to specialize function template
'boost::unique_future<boost::result_of<F(T0)>::type> vst::async(F &&,A1 &&)'
2> With the following template arguments:
2> 'std::string (__thiscall thread_pool_tests::Universe::* &)(void) const'
2> 'thread_pool_tests::Universe *'
2>threadpoolTest.cpp(78): error C2780: 'boost::unique_future<R> vst::async(F &&)' :
expects 1 arguments - 2 provided
2> with
2> [
2> R=
2> ]


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net