#include <thread>
#include <print>

struct data
{
    int foo;
    int bar;
};
data* shared_data;

int main()
{
    std::thread announcer([](){
        sleep(2);

        data* local_data = new data;                   // <-- write #1
        local_data->foo = 42;                          // <-- write #2
        local_data->bar = 666;                         // <-- write #3
        shared_data = local_data;                      // <-- write #4
    });

    while (true)
        if (shared_data) {
            std::println("foo {}, bar {}", shared_data->foo, shared_data->bar);
            break;
        }

    announcer.join();
    delete shared_data;
    return 0;
}
