Thread overview | |||||
---|---|---|---|---|---|
|
April 07, 2003 Funky DMC++ template bug | ||||
---|---|---|---|---|
| ||||
Trying to compile the std_mem_fun_t from COMSTL with DMC++ and it's not behaving itself. The template is defined as template< cs_typename_param_k T , cs_typename_param_k R > class std_mem_fun_t : public comstl_ns_qual_std(unary_function)<R (STDAPICALLTYPE T::*)(), R> { public: typedef R return_type; typedef T operand_class_type; typedef return_type (STDAPICALLTYPE T::*argument_type)(); public: /// \brief Constructor /// /// \param pmfn The function (pointer to member of T, returning R) which will be applied to the objects explicit std_mem_fun_t(argument_type pmfn) : m_pmfn(pmfn) {} /// \brief Function call operator /// /// \param pt The object pointer on which to apply the function return_type operator ()(operand_class_type *pt) const { return (pt->*m_pmfn)(); } private: argument_type m_pmfn; }; then when I try to use it as in for_each(items.begin(), items.end(), comstl::std_mem_fun_t<IUnknown, ULONG>(&IUnknown::Release)); it gives Compiling .\comstl\functionals_test\functionals_test.cpp comstl_ns_qual_std(for_each)(items.begin(), items.end(), comstl_ns_qual(std_mem_fun_t)<IUnknown, ULONG>(&IUnknown::Release)); ^ comstl\functionals_test\functionals_test.cpp(88) : Error: cannot find constructor for class matching stlsoft::comstl_project::std_mem_fun_t<>::stlsoft::comstl_project::std_mem_f un_t<>(unsigned long ( IUnknown::*std func)()) --- errorlevel 1 --- errorlevel 1 This works fine on Borland, Intel, MSVC, Metrowerks, so my working hypothesis is that DMC++ has the problem. Any clues'd be greatly appreciated. I'd be perfectly content with a workaround. Matthew |
April 07, 2003 Re: Funky DMC++ template bug | ||||
---|---|---|---|---|
| ||||
Posted in reply to Matthew Wilson | Could you make a small, standalone example? "Matthew Wilson" <dmd@synesis.com.au> wrote in message news:b6rt01$1gbg$1@digitaldaemon.com... > Trying to compile the std_mem_fun_t from COMSTL with DMC++ and it's not behaving itself. > > The template is defined as > > template< cs_typename_param_k T > , cs_typename_param_k R > > > class std_mem_fun_t > : public comstl_ns_qual_std(unary_function)<R (STDAPICALLTYPE T::*)(), > R> > { > public: > typedef R return_type; > typedef T operand_class_type; > typedef return_type (STDAPICALLTYPE T::*argument_type)(); > > public: > /// \brief Constructor > /// > /// \param pmfn The function (pointer to member of T, returning R) which > will be applied to the objects > explicit std_mem_fun_t(argument_type pmfn) > : m_pmfn(pmfn) > {} > > /// \brief Function call operator > /// > /// \param pt The object pointer on which to apply the function > return_type operator ()(operand_class_type *pt) const > { > return (pt->*m_pmfn)(); > } > > private: > argument_type m_pmfn; > }; > > then when I try to use it as in > > for_each(items.begin(), items.end(), comstl::std_mem_fun_t<IUnknown, > ULONG>(&IUnknown::Release)); > > it gives > > Compiling .\comstl\functionals_test\functionals_test.cpp > comstl_ns_qual_std(for_each)(items.begin(), items.end(), > comstl_ns_qual(std_mem_fun_t)<IUnknown, ULONG>(&IUnknown::Release)); > > ^ > comstl\functionals_test\functionals_test.cpp(88) : Error: cannot find > constructor for class matching > stlsoft::comstl_project::std_mem_fun_t<>::stlsoft::comstl_project::std_mem_f > un_t<>(unsigned long ( IUnknown::*std func)()) > --- errorlevel 1 > > --- errorlevel 1 > > This works fine on Borland, Intel, MSVC, Metrowerks, so my working > hypothesis is that DMC++ has the problem. > > Any clues'd be greatly appreciated. I'd be perfectly content with a workaround. > > Matthew > > > |
April 07, 2003 Re: Funky DMC++ template bug | ||||
---|---|---|---|---|
| ||||
Posted in reply to Walter | I'll try, but it's pretty much down to the bone as I've included here. I'll post another shortly. "Walter" <walter@digitalmars.com> wrote in message news:b6sk93$dao$3@digitaldaemon.com... > Could you make a small, standalone example? > > "Matthew Wilson" <dmd@synesis.com.au> wrote in message news:b6rt01$1gbg$1@digitaldaemon.com... > > Trying to compile the std_mem_fun_t from COMSTL with DMC++ and it's not behaving itself. > > > > The template is defined as > > > > template< cs_typename_param_k T > > , cs_typename_param_k R > > > > > class std_mem_fun_t > > : public comstl_ns_qual_std(unary_function)<R (STDAPICALLTYPE T::*)(), > > R> > > { > > public: > > typedef R return_type; > > typedef T operand_class_type; > > typedef return_type (STDAPICALLTYPE T::*argument_type)(); > > > > public: > > /// \brief Constructor > > /// > > /// \param pmfn The function (pointer to member of T, returning R) > which > > will be applied to the objects > > explicit std_mem_fun_t(argument_type pmfn) > > : m_pmfn(pmfn) > > {} > > > > /// \brief Function call operator > > /// > > /// \param pt The object pointer on which to apply the function > > return_type operator ()(operand_class_type *pt) const > > { > > return (pt->*m_pmfn)(); > > } > > > > private: > > argument_type m_pmfn; > > }; > > > > then when I try to use it as in > > > > for_each(items.begin(), items.end(), comstl::std_mem_fun_t<IUnknown, > > ULONG>(&IUnknown::Release)); > > > > it gives > > > > Compiling .\comstl\functionals_test\functionals_test.cpp > > comstl_ns_qual_std(for_each)(items.begin(), items.end(), > > comstl_ns_qual(std_mem_fun_t)<IUnknown, ULONG>(&IUnknown::Release)); > > > > ^ > > comstl\functionals_test\functionals_test.cpp(88) : Error: cannot find > > constructor for class matching > > > stlsoft::comstl_project::std_mem_fun_t<>::stlsoft::comstl_project::std_mem_f > > un_t<>(unsigned long ( IUnknown::*std func)()) > > --- errorlevel 1 > > > > --- errorlevel 1 > > > > This works fine on Borland, Intel, MSVC, Metrowerks, so my working > > hypothesis is that DMC++ has the problem. > > > > Any clues'd be greatly appreciated. I'd be perfectly content with a workaround. > > > > Matthew > > > > > > > > |
Copyright © 1999-2021 by the D Language Foundation