https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71955
Martin Liška <marxin at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED CC| |marxin at gcc dot gnu.org Resolution|--- |INVALID --- Comment #2 from Martin Liška <marxin at gcc dot gnu.org> --- Also p1 and p2 contain undefined behavior, that's reason why the program can't be compiled w/ -fpermissive. Running p1 with valgind shows: ==1728== Conditional jump or move depends on uninitialised value(s) ==1728== at 0x4F5D323: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_assign(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (in /usr/lib64/libstdc++.so.6.0.22) ==1728== by 0x4F5D6E8: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator=(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (in /usr/lib64/libstdc++.so.6.0.22) ==1728== by 0x400D85: SampleStringClass::SampleStringClass(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (in /home/marxin/Downloads/gcc-question/a.out) ==1728== by 0x400CA5: main (in /home/marxin/Downloads/gcc-question/a.out) ==1728== ==1728== Use of uninitialised value of size 8 ==1728== at 0x4EF12C0: std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char>, std::allocator<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (in /usr/lib64/libstdc++.so.6.0.22) ==1728== by 0x400DA9: SampleStringClass::show() (in /home/marxin/Downloads/gcc-question/a.out) ==1728== by 0x400CB1: main (in /home/marxin/Downloads/gcc-question/a.out) ==1728== Anand Apparao Kulkarni ==1728== Use of uninitialised value of size 8 ==1728== at 0x4EF12C0: std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char>, std::allocator<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (in /usr/lib64/libstdc++.so.6.0.22) ==1728== by 0x400DA9: SampleStringClass::show() (in /home/marxin/Downloads/gcc-question/a.out) ==1728== by 0x400CBD: main (in /home/marxin/Downloads/gcc-question/a.out) ==1728== Anand Apparao Kulkarni Thus I would suggest following patch to your source code: --- p1.backup 2016-07-21 11:22:20.651299644 +0200 +++ p1.cpp 2016-07-21 11:23:37.128793125 +0200 @@ -5,11 +5,10 @@ class SampleStringClass { private: - std::string& ref; + const std::string& ref; public: - SampleStringClass(const std::string& arg) + SampleStringClass(const std::string& arg): ref (arg) { - ref=arg; } void show() { @@ -19,11 +18,10 @@ class SampleIntClass { private: - int& ref; + const int& ref; public: - SampleIntClass(const int& arg) + SampleIntClass(const int& arg): ref (arg) { - ref=arg; } void show() {