/* REQUIRED_ARGS: -betterC PERMUTE_ARGS: RUN_OUTPUT: --- S.this() S.~this() inside --- */ import core.stdc.stdio; extern (C) int main() { auto j = test(1); assert(j == 3); return 0; } int test(int i) nothrow { { int j = i ? S(3).i : 3; printf("inside\n"); assert(Sctor == 1); assert(Sdtor == 1); return j; } printf("done\n"); return -1; } __gshared int Sctor; __gshared int Sdtor; struct S { int i; this(int i) nothrow { this.i += i; printf("S.this()\n"); ++Sctor; } ~this() nothrow { assert(i == 3); i = 0; printf("S.~this()\n"); ++Sdtor; } }