
----- Original Message ----- From: "Robert Kawulak" <robert.kawulak@gmail.com> To: <boost@lists.boost.org> Sent: Friday, October 08, 2010 7:45 PM Subject: Re: [boost] [constrained_value] Constrained Value review results 2010/10/8 vicente.botet <vicente.botet@wanadoo.fr>:
I was wondering if we could not use Boost.Ratio to specify compile time bounds for boost::rational. So instead of
bounded<rational, quarter2type, half2type>::type my_rational(rational(1, 2));
we can do
static_bounded<rational, ratio<1,4>, ratio<1,2> >::type my_rational(rational(1, 2));
Not static_bounded, but rather bounded<rational, ratio<1,4>, ratio<1,2> >::type. ratio<1,4> is a type, not a compile time constant. Once again I'll try to explain – static_bounded (bounded_int, bounded_ct or whatever we call it) is not exactly for bounds fixed at compile time, but for bounds values of which can be expressed by compile time constants.
We can consider that ratio is the rational_constant of rational as integral_constant is the tpe constant for integral types. Of cousre, we will need to use a comparator that would be able to compare ratio and rational.
template <intmax_t N, intmax_t D> bool operator<(rational<intmax_t> const& lhs, ratio<N,D> rhs); template <intmax_t N, intmax_t D> bool operator<(ratio<N,D> lhs, rational<intmax_t> const& rhs);
Or even simpler – make ratio implicitly convertible to rational. Either way, the best place for this functionality is probably the rational class. Best regards, Robert _______________________________________________ Sorr bau I dont see the difference. I consider ratio<N,D> to express a compile time constant through a type, as integral_c or integral_constant do. If ratio is converible to rational, all the optimizations oportunities could be lost as we will compare two run time types. Best, Vicente