Различные компиляторы дают разные ошибки:
struct S {
S* s = new S();
};
под правой версии GCC производит:
prog.cpp:2:15: error: constructor required before non-static data member for 'S::s' has been parsed
S* s = new S();
^
http://ideone.com/8TU5Th
Даже если вы на самом деле не вызывая new
в данный момент , компилятор должен разобрать звонок new
. Поскольку вы не поставляете по умолчанию ctor, он должен синтезировать один, но он не может этого сделать, потому что этот член ссылается на new
, который ссылается на ctor по умолчанию, поэтому пока этот оператор не будет полностью обработан, он не может знать, как сгенерировать т е р.
Кроме того, вы говорите, что «я не создаю какой-либо объект БАЗЫ» в комментариях на другой ответ, но в самом деле, вы делаете:
static const BASE base_1;
static BASE base_2;
оба этих заявлений потребуется программа для default-initialize экземпляр BASE при запуске, и первое, что этот экземпляр BASE будет делать, это выделить динамический экземпляр BASE и вызвать его конструктор, который будет ...
um what? не создаст 'BASE' создать другую' BASE' через 'new' и, следовательно, навсегда создать другую' BASE' и другую 'BASE'? что здесь используется? – vu1p3n0x
Можете ли вы предоставить ошибку, полученную от компилятора? – JVApen
синтезированный метод 'constexpr BASE :: BASE()' сначала требуется здесь | – QuantumEnergy