
Hello, 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 #if defined (BOOST_NO_TEMPLATED_STREAMS) ... // current impl #else 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 rational<IntType>&); #end 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 boost::tuple! Greetings from Bremen, Daniel Krügler