From: Andrey Semashev (andrey.semashev_at_[hidden])
Date: 2020-12-03 07:47:24


On 12/3/20 5:13 AM, Edward Diener via Boost wrote:
> On 12/2/2020 10:36 AM, Andrey Semashev via Boost wrote:
>>
>> In Boost.Filesystem
>> (https://github.com/boostorg/filesystem/commit/498a090b531833355ea27cea94d0440c432f8afc)
>> directory iterators switched from shared_ptr to intrusive_ptr
>> internally. This changed the ABI but not API, and this change would
>> not have been detected by the linker since this change would not
>> affect library symbols. Even ignoring Boost.Filesystem library, if
>> some part of user's code is not recompiled with the new library
>> headers, there would be ABI mismatch and related problems.
>
> But if the end-user's code does not reference the internal directory
> iterators why does the end-user code need to recompile itself to match
> the change to the internal ABI ?

Directory iterators are not internal, they are public API. Their
implementation, where the change was made, is internal.