Здравствуйте, c-smile, Вы писали:
struct context
{
static thread_local CTX* ctx;
context(CTX& c)
{
assert(ctx == 0);
ctx = &c;
enter(&c);
}
~context()
{
assert(ctx != 0);
leave(ctx);
ctx = 0;
}
};
Правда по поводу стека всё равно спорно, т.к. для объектов с деструкторами компилятор обычно заводит на стеке вспомогательную переменную через которую отслеживает какие объекты были сконструированы, а какие — нет (что бы знать для каких звать деструкторы, а для каких нет). Я думаю, это в равной мере относится и к D.
Но если не используются исключения, или уже есть другие объекты с деструкторами, то это не должно влиять.