Subject: Re: [boost] [rational] Inadvertent construction from double
From: Andrzej Krzemienski (akrzemi1_at_[hidden])
Date: 2014-07-25 08:13:09


2014-07-25 13:38 GMT+02:00 Andrzej Krzemienski <akrzemi1_at_[hidden]>:

> Hi,
> I have encountered something I consider a bug in boost::rational's
> interface. Its documentation discusses in detail why conversion from double
> is not supported, but the following code works fine:
>
> #include <iostream>
> #include <boost/rational.hpp>
>
> int main()
> {
> double d = 31.82;
> boost::rational<int> r = d;
> std::cout << r << std::endl;
> }
>
> With the following result:
> 31/1
> It just discards the fractional part. Such conversion is really confusing
> an I claim should be explicitly deleted.
>

I forgot to mention why this is working. A double is implicitly converted
to int and then the implicit constructor from int is used.