C++03 Standard 1.9/6 defines observable behavior:
The observable behavior of the abstract machine is its sequence of reads and writes to volatile data and calls to library I/O functions.
and then and then 1.9/7 defines side effects:
Accessing an object designated by a volatile lvalue (3.10), modifying an object, calling a library I/O function, or calling a function that does any of those operations are all side effects, which are changes in the state of the execution environment.
Is a side effect an observable behavior or not? How are they related to each other?