Boost logo

Boost Users :

From: Anil Muthigi (anilmuthigi123_at_[hidden])
Date: 2021-04-08 02:33:09


But I am not even doing any kind of input or output using __int128 FOR THE VARIANT VARIABLE….

As you can see… if you choose to use int instead of __int128 for the VARIANT VARIABLE and rerun the code…. it is actually printing the value of the __int128 variable d which I have used in the code..
 So, I guess it is actually picking up my std::ostream& operator<<(std::ostream& o, const __int128& x) functionality.

> On 08-Apr-2021, at 7:52 AM, Edward Diener via Boost-users <boost-users_at_[hidden]> wrote:
>
> On 4/7/2021 9:58 PM, Edward Diener via Boost-users wrote:
>> On 4/7/2021 7:10 PM, Anil Muthigi via Boost-users wrote:
>>> If u see my code, I have used __int128 separately for the variable d as well. If u change the variant variable' s data type from __int128 to int , it will run just fine.
>> The reason your code is failing is because your stream operator uses streaming and __int128 has no stream support. If you use an __int128 in a variant, but never use streaming, your code is fine. I do not know the reason why gcc and clang support __int128 but do not support the the type in streaming. Maybe you should try asking gcc about it or investigate it as a stackoverflow question.
>> Please do not topmost.
>
> Apologies ! It looks as if the variant i/o is simply not picking up your std::ostream& operator<<(std::ostream& o, const __int128& x) functionality. I tried putting your functionality in namespace boost but it still did not pick it up.
>
>>>
>>> On Thu, 8 Apr 2021, 04:30 Edward Diener via Boost-users, <boost-users_at_[hidden] <mailto:boost-users_at_[hidden]>> wrote:
>>>
>>> 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...
>>>
>>> My test with gcc-10.2 and clang-linux-11.0 shows that it does not
>>> support __int128 in iostreams.
>>>
>> _______________________________________________
>> Boost-users mailing list
>> Boost-users_at_[hidden]
>> https://lists.boost.org/mailman/listinfo.cgi/boost-users
>
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden] <mailto:Boost-users_at_[hidden]>
> https://lists.boost.org/mailman/listinfo.cgi/boost-users <https://lists.boost.org/mailman/listinfo.cgi/boost-users>



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