Привет. Нужно - задать необходимый порядок вызова деструкторов. Рабочий ли вариант:
struct S {
const char *c;
S(const char *c): c{c} {}
~S() {cout << c << endl;}
};
S &g1() {
static S s{"g1"};
return s;
}
S &g2() {
static S s{"g2"};
return s;
}
int main() {
g1(); // создаём g1::S
g2(); // создаём g2::S
return 0;
}