
Thanks for your reply! I tried to add your suggestions. Now the compilation doesn't seem to be able to pass struct loop. Error message: meta.cc:31: error: type/value mismatch at argument 2 in template parameter list for 'template<class C, class F1, class F2> struct boost::mpl::eval_if' meta.cc:31: error: expected a type, got 'loop::value' I marked line 31 with an asterix. Any further ideas? Frank template< typename totalsize , typename maxelement , typename poolsize > struct loop { typedef typename mpl::times< totalsize , maxelement >::type part0; typedef typename mpl::times< part0 , mpl::int_< 3 > >::type part1; typedef typename mpl::greater< part1 , poolsize >::type gr; typedef typename mpl::divides< maxelement , mpl::int_< 2 > >::type maxelement2; * typedef typename mpl::eval_if< gr , loop< totalsize , maxelement2 , poolsize >::value , maxelement >::type value; }; void sub3( ) { loop< mpl::int_< 144 > , mpl::int_< 1024 > , mpl::int_< 140000 > > ::value maxee; //BOOST_STATIC_ASSERT(( maxee::type::value == 256 )); } On Sun, 11 Jul 2010, Steven Watanabe wrote:
AMDG
Frank Winter wrote:
I am trying to translate this runtime loop
while( totalsize * maxelem * 3 > poolsize ) maxelem >>= 1;
into MPL. I got so far:
template< typename totalsize , typename maxelement , typename poolsize > struct loop { typedef mpl::times< totalsize , maxelement > part0; typedef mpl::times< part0 , mpl::int_< 3 > > part1; typedef mpl::greater< part1 , poolsize > gr; typedef mpl::if_< gr , typename loop< totalsize , mpl::divides< maxelement , mpl::int_< 2 > > , poolsize >::value , maxelement > value; };
Try using eval_if so you don't recurse forever. I would also suggest extracting the ::type from mpl::divides, so that the type doesn't grow indefinitely. You also need to get the ::type out of mpl::if_.
template< class totalsize , class poolsize > struct loop< totalsize , mpl::int_< 1 > , poolsize > { typedef mpl::int_< 1 > value; };
This specialization won't work, since mpl::divides<...> is not the same type as mpl::int_<1>.
In Christ, Steven Watanabe
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users