C++ 標準によると、次のようになります。
評価 A は、次の場合に評価 B に依存します。 - A の値が B のオペランドとして使用されます。
— B は std::kill_dependency (29.3) の特殊化の呼び出し、または
— A は組み込みの論理 AND (&&、5.14 を参照) または論理 OR (||、5.15 を参照) 演算子の左オペランド、または
— A が条件 (?:、5.16 を参照) 演算子の左オペランド、または
— A は、組み込みのコンマ (,) 演算子 (5.18) の左オペランドです。(...)
関係の前に順序付けされた依存関係が kill_dependency 呼び出しで停止する理由は理解できますが、論理 AND、OR、コンマなどの演算子も依存関係チェーンを壊すのはなぜですか?
以下のコードには未定義の動作があるということですか?
//thread1
int y = 2
atomicVal.store(true);
//thread2
auto x = atomicVal.load(std::memory_order_consume);
cout << x && y;