Why is std::weak_ptr::expired optimized away? Why is std::weak_ptr::expired optimized away? multithreading multithreading