Код: Выделить всё
#include
#include
struct T {
T(){
x = -2;
}
int x;
std::string o;
};
int main() {
static T t =[](){
T x;
t.x = 1;
return x;
}();
std::print("{}", t.x);
}
< /code>
Этот код создает 1 как для Clang, так и для GCC. Удаление назначения T.X = 1
В начале я думаю, что в неагрегатных типах что -то есть. Замена std :: string на std :: vector по -прежнему создает 1. Как бы то ни было, заменив его на очень простой неагрегатный тип (пустой тип с определенным пользователем конструктор по умолчанию просто напечатает что -то).>
Подробнее здесь: https://stackoverflow.com/questions/796 ... prevent-it