Thread overview
Funky DMC++ template bug
Apr 07, 2003
Matthew Wilson
Apr 07, 2003
Walter
Apr 07, 2003
Matthew Wilson
April 07, 2003
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
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
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
> >
> >
> >
>
>