[PATCH] PR78991 make __gnu_cxx::__ops constructors explicit

Jonathan Wakely jwakely@redhat.com
Mon Jan 9 11:05:00 GMT 2017


On 09/01/17 10:47 +0000, Jonathan Wakely wrote:
>On 09/01/17 10:39 +0000, Kyrill Tkachov wrote:
>>Hi Jonathan,
>>
>>On 06/01/17 12:40, Jonathan Wakely wrote:
>>>This solves a problem when using libstdc++ with Clang, due to Clang
>>>more eagerly instantiating constexpr function templates during
>>>argument deduction. G++ has some shortcuts to avoid this problem, but
>>>Clang doesn't, and it's not clear that it's strictly speaking a bug in
>>>Clang or if it's following the standard. By making these constructors
>>>explicit we stop them being considered by overload resolution for
>>>copying these functors, which stops us ending up back in the
>>>std::function SFINAE checks.
>>>
>>>I'm also using _GLIBCXX_MOVE to turn some internal copies into moves,
>>>because otherwise using something like std::function with <algorithm>
>>>results in a number of potentially expensive copies.
>>>
>>>   PR libstdc++/78991
>>>   * include/bits/predefined_ops.h (_Iter_comp_iter, _Iter_comp_val)
>>>   (_Val_comp_iter, _Iter_equals_val, _Iter_pred, _Iter_comp_to_val)
>>>   (_Iter_comp_to_iter, _Iter_negate): Make constructors explicit and
>>>   move function objects.
>>>   (__iter_comp_iter, __iter_comp_val, __val_comp_iter, __pred_iter)
>>>   (__iter_comp_val, __iter_comp_iter, __negate): Move function objects.
>>>   * testsuite/25_algorithms/sort/78991.cc: New test.
>>>
>>>Tested powerpc64le-linux, committed to trunk.
>>>
>>>I'll backport  the 'explicit' constructors (but not the _GLIBCXX_MOVE
>>>changes) to the branches too.
>>>
>>
>>I see this test fail on the GCC 5 branch on arm and aarch64 (error message pasted below).
>>Does the test need a gnu++11 guard or something on the branch?
>
>I thought I'd changed that before committing, I'll fix it.

Committed to gcc-5-branch.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: patch.txt
Type: text/x-patch
Size: 698 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/libstdc++/attachments/20170109/9f0a4b6d/attachment.bin>


More information about the Libstdc++ mailing list