```cpp
// Thread 1
// do A
x.store(1, std::memory_order_release); // operation1

// Thread 2
// do B
x.store(2, std::memory_order_release); // operation2

// Thread 3
x.load(std::memory_order_acquire); // operation3

```

I've understood that if thread3 reads the value written by thread1, the release and acquire operations are *synchronized-with*, and effect of `A` is visible to thread3.  

But what if the case is that:

* the modification order for `x` is 1, 2
* thread3 reads the value written by thread2, thus 2 *happens-before* 3.

Is there *happens-before* relationship between 1 and 3 ?  

or intrinsically, does modification order contribute to *happens-before* relationship ?