Make safe_iterator inline friends
François Dumont
frs.dumont@gmail.com
Tue Aug 28 19:21:00 GMT 2018
On 28/08/2018 21:04, Jonathan Wakely wrote:
> On 23/08/18 22:59 +0200, François Dumont wrote:
>> On 22/08/2018 23:45, Jonathan Wakely wrote:
>>> On 22/08/18 23:08 +0200, François Dumont wrote:
>>>> Only operator== and != remains outside _Safe_iterator because all
>>>> my attempts to make them inline friends failed. I understand that
>>>> an inline friend within a base class is not a very clean design.
>>>>
>>>> Compiler error was:
>>>>
>>>> /home/fdt/dev/gcc/build/x86_64-pc-linux-gnu/libstdc++-v3/include/debug/safe_iterator.h:459:
>>>> error: redefinition of 'bool __gnu_debug::operator==(const _Self&,
>>>> const _OtherSelf&)'
>>>> /home/fdt/dev/gcc/build/x86_64-pc-linux-gnu/libstdc++-v3/include/debug/safe_iterator.h:452:
>>>> note: 'bool __gnu_debug::operator==(const _Self&, const _Self&)'
>>>> previously declared here
>>>> /home/fdt/dev/gcc/build/x86_64-pc-linux-gnu/libstdc++-v3/include/debug/safe_iterator.h:473:
>>>> error: redefinition of 'bool __gnu_debug::operator!=(const _Self&,
>>>> const _OtherSelf&)'
>>>> /home/fdt/dev/gcc/build/x86_64-pc-linux-gnu/libstdc++-v3/include/debug/safe_iterator.h:466:
>>>> note: 'bool __gnu_debug::operator!=(const _Self&, const _Self&)'
>>>> previously declared here
>>>>
>>>> I don't know if it is a compiler issue
>>>
>>> I don't think so. The error seems clear: when _Self and _OtherSelf are
>>> the same type the friend declarations are the same function.
>>>
>>>
>> _Self and _OtherSelf and like the types defined in
>> _Safe_iterator<_It, _Sq, random_access_interator_tag> in this patch.
>> Depending on __conditional_type so definitely different.
>
> What about containers like std::set where iterator and const_iterator
> are the same type?
Good point, thanks, I'll consider this point.
>
> There's no changelog in the email with the patch.
>
And I'll also provide ChangeLog next time.
François
More information about the Libstdc++
mailing list