Implement C++20 constexpr <algorithm>, , and <array>

Ed Smith-Rowland via libstdc++ libstdc++@gcc.gnu.org
Fri Mar 29 16:31:00 GMT 2019


On 3/29/19 11:12 AM, Jakub Jelinek wrote:
> On Fri, Mar 29, 2019 at 11:07:53AM -0400, Jason Merrill wrote:
>> On Tue, Mar 19, 2019 at 4:57 PM Ed Smith-Rowland via gcc-patches
>> <gcc-patches@gcc.gnu.org> wrote:
>>> On 3/18/19 6:18 PM, Jonathan Wakely wrote:
>>>> On 17/03/19 22:54 -0400, Ed Smith-Rowland via libstdc++ wrote:
>>>> I'm very surprised that none of the algos that dispatch to
>>>> __builtin_memove need changes, because those optimizations won't work
>>>> in constant expressions. I would expect to have to use
>>>> std::is_constant_evaluated to disable the optimizations when used in
>>>> constant expressions.
>>>>
>>> As am I. As I mentioned on IRC I could roll a constexpr memmove.
>>>
>>> I was wondering if somehow I'm not checking what I think I'm checking
>>> (but I don't see how.)
>>>
>>> I wonder if the builtins are handled differently somehow by the front
>>> end.  I'm still not sure why __builtin_memcmp is OK for array == array
>>> but not array != array.  In that case I just do element by element
>>> compare for constexpr now anyway.
>> Is there a PR about making these builtins work in constexpr?
> Yes, PR80265.
>
> 	Jakub
>
I see what you did there ;-) I could make my patch use the same idiom as 
what you have in the char_traits patch if folks would prefer.

BTW, what does

(void) __s;

do?

In other news, assuming that it's official there was constexpr in 
char_traits in some paper.  I was going to try that but it looks like 
you were starting.

Ed



More information about the Libstdc++ mailing list