The following code utilizes a destructor that modifies `i`. When the destructor is run, `2` is supposed to be stored into `i` yet when `thing()` returns we observe `-1`.

```
#include <stdio.h>

class Destruct {
    int &i;
public:
    Destruct(int &_i) : i(_i) {}
    ~Destruct() {
        i = 2;
    }
};

int thing() {
    int i = -1;
    Destruct d(i);
    return i;
}

int main() {
    printf("i: %d\n", thing());
}

```