https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104348

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         Resolution|---                         |DUPLICATE
             Status|UNCONFIRMED                 |RESOLVED

--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
This is already fixed on the gcc-10 branch and in 11.1.0

Reduced to compile-time test:

#include<string_view>
#include<algorithm>

class Test
{
public:
    //for some reason, bug don't appear if std::string_view not wrapped in
another class
    class Value
    {
    public:
        constexpr Value(const char*str):data(str){}
        constexpr bool operator<(const Value&value)const{return
data<value.data;}

        std::string_view data;
    };

    constexpr Test()
    {
        //no bug if std::sort used
        //std::sort(array,array+8);
        std::make_heap(array,array+8);
        std::sort_heap(array,array+8);
    }

    Value array[8]={"1","2","3","4","5","6","7","8"};
};

    //Bug. Product 17256348 instead of 12345678
    static constexpr Test test;

    static_assert( test.array[1].data[0] == '2' );


Fixed by r11-8056:

PR c++/99859
* constexpr.c (addr_of_non_const_var): New function.
(cxx_bind_parameters_in_call): Set *non_constant_args to true
even if cp_walk_tree on arg with addr_of_non_const_var callback
returns true.

That was already backported as r10-9722

*** This bug has been marked as a duplicate of bug 99859 ***

Reply via email to