c++ - Funky DMC++ template bug
- Matthew Wilson (51/51) Apr 07 2003 Trying to compile the std_mem_fun_t from COMSTL with DMC++ and it's not
- Walter (5/55) Apr 07 2003 Could you make a small, standalone example?
- Matthew Wilson (6/78) Apr 07 2003 I'll try, but it's pretty much down to the bone as I've included here. I...
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
Apr 07 2003
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)whichwill 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 matchingstlsoft::comstl_project::std_mem_fun_t<>::stlsoft::comstl_project::std_mem_fun_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
Apr 07 2003
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...T::*)(),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 (STDAPICALLTYPEstlsoft::comstl_project::std_mem_fun_t<>::stlsoft::comstl_project::std_mem_fR> { 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)whichwill 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 matchingun_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
Apr 07 2003