このプレフィックスによると、をstd::atomic<T>::operator++返すため、このコードは1回Tだけインクリメントします。v
template<class T> void addTwo(std::atomic<T>& v) {
++(++v);
}
また、std::atomic<T>::operator= 明らかにを返すTので、このコードは一時的なものを指すために使用された無効なポインターを逆参照しますT:
template<class T>
void setOneThenTwo(std::atomic<T>& v) {
auto ptr = &(v = 1);
*ptr = 2;
}
私はこれらのコードパターンが良い習慣であることを示唆しているわけではありませんが、std::atomicそれらを破ることは私にとって非常に驚くべきことです。operator=私は常に、プレフィックスoperator++がへの参照を返すことを期待してい*thisます。
質問:std::atomicここでの戻り型についてのcppreferenceは正しいですか?もしそうなら、この点で組み込み型とは異なる動作をする正当な理由がありますか?