Boost logo

Boost Users :

From: David Abrahams (dave_at_[hidden])
Date: 2005-06-10 12:12:42


Vyacheslav Kononenko <vyacheslav_at_[hidden]> writes:

> Hi,
>
> I've been trying boost::mpl for my current project and
> hit a problem.
> Sorry if it is an already known issue. So if we have
> our own
> metafucntion:
> template< typename T, typename Value > func :
> mpl::void_ {};
>
> it works fine:
> typedef mpl::find_if< mpl::vector< int, char >, func<
> mpl::_1,
> mpl::int_< 10 > >::type iter;
> ...
>
> But if I try to use integral value instead:
> template< typename T, int Value > func : mpl::void_
> {};
>
> and
>
> typedef mpl::find_if< mpl::vector< int, char >, func<
> mpl::_1, 10
>
>>::type iter;
>
> It fails on gcc 3.3.3 nor 3.4.3.

No surprise. This func doesn't fit the Metafunction concept:
http://www.boost.org/libs/mpl/doc/refmanual/metafunction.html

  A metafunction is a class or a class template that represents a
  function invocable at compile-time. An non-nullary metafunction is
  invoked by instantiating the class template with particular template
  parameters (metafunction arguments); the result of the metafunction
  application is accessible through the instantiation's nested type
  typedef. All metafunction's arguments must be types (i.e. only type
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  template parameters are allowed). A metafunction can have a variable
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  number of parameters. A nullary metafunction is represented as a
  (template) class with a nested type typename member.

HTH,

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com

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