Make safe_iterator inline friends

Jonathan Wakely jwakely@redhat.com
Tue Aug 28 19:04:00 GMT 2018


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?

There's no changelog in the email with the patch.






More information about the Gcc-patches mailing list