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

            Bug ID: 114410
           Summary: compiler issue in reference_binding when using rvalue
                    reference to member of const object
           Product: gcc
           Version: 13.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: cvoica at gmail dot com
  Target Milestone: ---

The issue "internal compiler error: in reference_binding, at cp/call.cc:2020"
is visible when compiling this program

#include<iostream>
#include<string>

template<typename T>
class Holder{
    typedef T value_type;
    value_type m_v;
public:
    Holder(const value_type& v):m_v(v){}
    operator const value_type() const{return m_v;}
    operator value_type(){return m_v;}

//    operator const value_type&() const{return m_v;}
//    operator value_type&(){return m_v;}
};

struct A {
    Holder<std::string> m_i;
    A(const std::string& i):m_i(i){}
};


void bad_const_access(const A* a){
    std::cout << (std::string&)a->m_i << std::endl; //crash in gcc-13 but OK in
gcc-12
}
void correct_const_access(const A* a){
    std::cout << (const std::string&)a->m_i << std::endl;
}
int main(){
    const A a("test");
    bad_const_access(&a);
    correct_const_access(&a);
    return 0;
}

Reply via email to