Использование gcc версии 4.4.3 следующим образом:
gcc -g -x c++ -lstdc++ -std=c++98 -o ./main ./main.cpp
этот код в main.cpp компилируется нормально:
#include <iostream>
struct A
{
A()
: m_flag(false)
{
}
const bool m_flag;
};
static A aa = A();
int main(int argc, char* argv[])
{
A a;
// Not static = copy OK
A b( a );
A c = b;
A d = A();
// Static = copy not OK
// aa = A();
}
Но если я раскомментирую aa = A();
, я получу:
./main.cpp: In member function 'A& A::operator=(const A&)':
./main.cpp:4: error: non-static const member 'const bool A::m_flag', can't use default assignment operator
./main.cpp: In function 'int main(int, char**)':
./main.cpp:24: note: synthesized method 'A& A::operator=(const A&)' first required here
Почему конструкция копирования по умолчанию и назначение копирования работают для копий в стеке, но не при замене неконстантного static
на копию?