Boost logo

Boost :

Subject: Re: [boost] [iostream] Boost should not be saying "_FPOSOFF"
From: Edward Diener (eldiener_at_[hidden])
Date: 2016-09-06 16:32:59


On 9/6/2016 2:49 PM, Daniel James wrote:
> On 6 September 2016 at 19:24, Stephan T. Lavavej
> <stl_at_[hidden]> wrote:
>> [Rob Stewart]
>>> Can you tell us what change can be made to the code to effect what had been gained by using that macro?
>>
>> It's unconditionally:
>>
>> #define _FPOSOFF(fp) ((long long)(fp))
>>
>> So you should be able to replace it with a static_cast, or eliminate it entirely.
>
> That might break older versions, or other uses of Dinkumware. I would
> try changing this configuration file so that it only applies to old
> versions:
>
> https://github.com/boostorg/iostreams/blob/develop/include/boost/iostreams/detail/config/fpos.hpp
>
> I don't have access to Visual C++ so I can't do it myself. If anyone
> wants to, all the relevant code is here:
>
> https://github.com/boostorg/iostreams/blob/develop/include/boost/iostreams/positioning.hpp

The best way for iostreams seems to be to create and use its own macro,
equivalent to _FPOSOFF(fp), for older versions of VC++ but hardcodes as
'((long long)(fp))' for VC++14 on up. This would allow Microsoft to
remove it in future versions of VC++ without affecting iostreams. I
assume Microsoft will not be retroactively removing for older versions
of VC++ prior to VC++14, even if it is an implementation detail.

If iostreams is not currently under CMT, if you add it as a CMT library
I will make the appropriate change and test it out. This won't get in
1.62 but should be in the next release after that.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk