3 ms·
As far as complicated features that very few people understand or use and that are hard to implement correctly in compilers, std::launder ranks pretty high. To
by tux3 3y ago
As far as complicated features that very few people understand or use and that are hard to implement correctly in compilers, std::launder ranks pretty high.
Topping the list, for me, would be memory_order_consume. It's so complicated and for such a slight extremely technical memory ordering optimization, compilers have mostly given up hope of ever implementing it.
There was even talk of outright removing it from C++, but looks like it still stands today. I've never seen it used correctly (and even if it were, compilers just throw up their hands at it)
- ric129 3y agoI recall plenty of implementations turning into the same as a memory_order_acquire, which seems fine these days
- loeg 3y ago> On all mainstream CPUs other than DEC Alpha, dependency ordering is automatic, no additional CPU instructions are issued for this synchronization mode, only certain compiler optimizations are affected (e.g. the compiler is prohibited from performing speculative loads on the objects that are involved in the dependency chain). > Note that currently (2/2015) no known production compilers track dependency chains: consume operations are lifted to acquire operations. https://en.cppreference.com/w/cpp/atomic/memory_order#Release-Consume_ordering https://en.cppreference.com/w/cpp/atomic/memory_order#Releas...