Boost logo

Boost Users :

From: Daniel Krügler (dsp_at_[hidden])
Date: 2005-08-22 01:34:59


After a short view at the rational.hpp header I propose to perform the
following changes:

1) As counterpart to the existing:

bool operator!() const;

one should definitly add:

operator bool_replacement_type() const;

with a proper (member function pointer) definition of bool_replacement_type.

2) The function template

template <typename IntType>
IntType lcm(IntType n, IntType m);

should be defined as

template <typename IntType>
IntType lcm(IntType n, boost::call_traits<IntType>::param_type m);

which makes sense in this case because m is not modified internally (in
contrast to n)

3) The boost::rational IO should use proper templated extractors and
inserters for those (most) compilers, which provide corresponding std IO
libraries, such that

    ... // current impl

template<class CharType, class CharTrait, class IntType>
inline std::basic_istream<CharType, CharTrait>&
operator>>(std::basic_istream<CharType, CharTrait> &is, rational<IntType>&);

template<class CharType, class CharTrait, class IntType>
inline std::basic_ostream<CharType, CharTrait>&
operator<<(std::basic_ostream<CharType, CharTrait> &os, const


Furtheron I propose to replace the helper class detail::resetter by
boost::ios_flags_saver, or even better to remove it all all, because I
assume, that the temporary unsetting of the skipws flag does not make much
sense - Does it?

I also propose to replace the current setting of ios_base::badbit (if
widen('/') was not found) by the more appropriate setting of
ios_base::failbit - This behaviour is in sync with std::complex and

Greetings from Bremen,

Daniel Krügler

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at