#include <iostream>

struct Mark {
    int value;
    ~Mark() {
        std::cout << "destroy " << value << '\n';
    }
};

void observe(const Mark& mark) {
    std::cout << "observe " << mark.value << '\n';
}

int main() {
    std::cout << "direct\n";
    {
        const Mark& kept{Mark{7}};
        std::cout << "value " << kept.value << '\n';
        std::cout << "scope end\n";
    }
    std::cout << "after scope\n";
    std::cout << "call\n";
    observe(Mark{9});
    std::cout << "after call\n";
    return 0;
}
