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