У меня есть код, который не удается скомпилировать с Visual Studio 2015 Community Edition со следующей ошибкой:
фатальная ошибка C1002: компилятору не хватает места в куче на этапе 2
struct Int { int i; };
struct B {
union {
struct { int x; };
struct { Int y; };
};
constexpr B() : x(1) {}
};
struct A { static B b; };
B A::b;
int main() {
return 0;
}
Это самое простое, что мне удалось довести до отказа методом проб и ошибок, но все еще происходит немало.
Что меня удивило, так это то, что каждое из следующих изменений приводит к тому, что оно компилируется просто отлично …
Удаление constexpr
от B
Конструктор заставляет его работать:
struct Int { int i; };
struct B {
union {
struct { int x; };
struct { Int y; };
};
B() : x(1) {} // <---<< ( constexpr B() : x(1) {} )
};
struct A { static B b; };
B A::b;
int main() {
return 0;
}
изменения A
переменная не static
заставляет это работать:
struct Int { int i; };
struct B {
union {
struct { int x; };
struct { Int y; };
};
constexpr B() : x(1) {}
};
struct A { B b; }; // <---<< ( struct A { static B b; }; B A::b; )
int main() {
return 0;
}
Используя равнину int
в B
«s union
второй struct
вместо int
Обертка заставляет его работать:
struct Int { int i; };
struct B {
union {
struct { int x; };
struct { int y; }; // <---<< ( struct { Int y; }; )
};
constexpr B() : x(1) {}
};
struct A { static B b; };
B A::b;
int main() {
return 0;
}
По умолчанию инициализации x
в B
конструктор, а не прохождение 1
заставляет это работать:
struct Int { int i; };
struct B {
union {
struct { int x; };
struct { Int y; };
};
constexpr B() : x() {} // <---<< ( constexpr B() : x(1) {} )
};
struct A { static B b; };
B A::b;
int main() {
return 0;
}
Наконец, принимая B
«s union
«s Int
член из структуры заставляет его работать:
struct Int { int i; };
struct B {
union {
struct { int x; };
Int y; // <---<< ( struct { Int y; }; )
};
constexpr B() : x(1) {}
};
struct A { static B b; };
B A::b;
int main() {
return 0;
}
Достаточно сказать, что я в полной растерянности. Я был бы очень признателен за любую помощь от кого-то, кто понимает компилятор лучше, чем я.
Задача ещё не решена.
Других решений пока нет …