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