Boost logo

Boost :

From: Janusz Piwowarski (jpiw_at_[hidden])
Date: 2004-06-22 02:37:48


Michael Glassford wrote:
> Janusz Piwowarski wrote:
> > [...]
> > After latest cvs update, i've got errors like:
> >
> > gcc-C++-action
> >
bin\boost\libs\thread\build\boost_thread.dll\mingw\debug\threading-multi\con
> > dition.obj
> > In file included from d:/sources/boost/libs/thread/src/condition.cpp:18:
> > d:/sources/boost/libs/thread/src/timeconv.inl: In function `void
> > <unnamed>::to_time(int, boost::xtime&)':
> > d:/sources/boost/libs/thread/src/timeconv.inl:24: error:
template-argument `
> > boost::<anonymous enum>' uses anonymous type
> > d:/sources/boost/libs/thread/src/timeconv.inl: In function `void
> > <unnamed>::to_duration(boost::xtime, int&)':
> > d:/sources/boost/libs/thread/src/timeconv.inl:92: error:
template-argument `
> > boost::<anonymous enum>' uses anonymous type
> > d:/sources/boost/libs/thread/src/timeconv.inl: In function `void
> > <unnamed>::to_microduration(const boost::xtime&, int&)':
> > d:/sources/boost/libs/thread/src/timeconv.inl:114: error:
template-argument
> > `boost::<anonymous enum>' uses anonymous type
>[...]
> As you indicate, the definition of the enum and the actual assertions
> haven't changed in a very long time, so they likely aren't the problem.
> Perhaps the compiler configuration or the definition of assert itself
> changed? I'm not familiar with the compiler, but the error
>
> > d:/sources/boost/libs/thread/src/timeconv.inl:24:
> > error: template-argument `
> > boost::<anonymous enum>' uses anonymous type
>
> implies a template-based implementation of assert which doesn't like the
> fact that the enumeration has no name. Have you tried giving it a name
> to see what effect that has?

I found source of this problem - latest changes in
boost/function/function_base.hpp. Compiler try to instatiate template from
line 533:

template<typename Functor>
  BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)
  operator==(const function_base& f, Functor g)
  {
    if (const Functor* fp = f.template target<Functor>())
      return function_equal(*fp, g);
    else return false;
  }

Is this intentional?

With named enum library compiles successful.

Regards,
Janusz


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk