On 4/7/2021 10:33 PM, Anil Muthigi via Boost-users wrote:
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.

I agree that variant does not support __int128. File a Issue report at https://github.com/boostorg/variant if you wish. I am not the variant maintainer. You may also try variant2.


On 08-Apr-2021, at 7:52 AM, Edward Diener via Boost-users <boost-users@lists.boost.org <mailto:boost-users@lists.boost.org>> 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@lists.boost.org <mailto:boost-users@lists.boost.org> <mailto:boost-users@lists.boost.org <mailto:boost-users@lists.boost.org>>> 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@lists.boost.org <mailto:Boost-users@lists.boost.org>
https://lists.boost.org/mailman/listinfo.cgi/boost-users


_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org <mailto:Boost-users@lists.boost.org>
https://lists.boost.org/mailman/listinfo.cgi/boost-users <https://lists.boost.org/mailman/listinfo.cgi/boost-users>


_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
https://lists.boost.org/mailman/listinfo.cgi/boost-users



_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
https://lists.boost.org/mailman/listinfo.cgi/boost-users

Reply via email to