Boost logo

Boost Users :

From: Edward Diener (eldiener_at_[hidden])
Date: 2021-04-09 12:58:28


On 4/7/2021 3:38 PM, Anil Muthigi via Boost-users wrote:
> I said that I am not sure if boost::variant supports __int128 because I
> had difficulties in compiling this code :
>
> 1.
> #include <boost/variant.hpp>
> 2.
> #include <string>
> 3.
> #include <iostream>
> 4.
> std::ostream& operator<<(std::ostream& o, const __int128& x) { if (x
> == std::numeric_limits<__int128>::min()) return o <<
> "-170141183460469231731687303715884105728"; if (x < 0) return o <<
> "-" << -x; if (x < 10) return o << (char)(x + '0'); return o << x /
> 10 << (char)(x % 10 + '0'); }
> 5.
> int main()
> 6.
> {
> 7.
> boost::variant<__int128, char, std::string> v;
> 8.
> v = 56;
> 9.
> v = 'Y';
> 10.
> __int128 d=12;
> 11.
> std::cout <<d << '\n';
> 12.
> std::cout << v << '\n';
> 13.
> v = "Yashaswi raj";
> 14.
> std::cout << v << '\n';
> 15.
> }
>
> If u replace __int128 with int in the variant variable, it seems to work
> just fine...

As others have pointed out, the correct code is:

#include <boost/variant.hpp>
#include <string>
#include <iostream>

namespace std
{

std::ostream& operator<<(std::ostream& o, const __int128& x)
     {
     if (x == std::numeric_limits<__int128>::min()) return o <<
"-170141183460469231731687303715884105728";
     if (x < 0) return o << "-" << -x;
     if (x < 10) return o << (char)(x + '0');
     return o << x / 10 << (char)(x % 10 + '0');
     }

}

int main()
{

boost::variant<__int128, char, std::string> v;
v = static_cast<__int128>(56);
v = 'Y';
__int128 d=12;
std::cout << d << '\n';
std::cout << v << '\n';
v = "Yashaswi raj";
std::cout << v << '\n';
return 0;
}

So __int128 does indeed work with variant, as I originally surmised.

>
> On Thu, 8 Apr 2021, 00:10 Edward Diener via Boost-users,
> <boost-users_at_[hidden] <mailto:boost-users_at_[hidden]>> wrote:
>
> On 4/7/2021 2:15 PM, Anil Muthigi via Boost-users wrote:
> > I dont think so...
>
> If it is available why do you think variant would not support it ?
>
> > I guess int128_t under boost/multiprecision/cpp_int is the only
> viable
> > option.
> >
> > On Wed, 7 Apr 2021, 11:39 pm David Frank via Boost-users,
> > <boost-users_at_[hidden] <mailto:boost-users_at_[hidden]>
> <mailto:boost-users_at_[hidden]
> <mailto:boost-users_at_[hidden]>>> wrote:
> >
> >     especially the gnu __int128?


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net