I'm learning Solidity by reading these docs and found this statement confusing. I'm fairly certain that the correct description here is that the *callee* changes get reverted, but the caller is able to react to the failures.
I tested this with the following snippet in Remix, which resulted in a successful transaction when deployed:
```
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.7;
contract A {
uint public value;
function a(uint newValue, bool shouldRevert) external {
value = newValue;
if (shouldRevert) {
revert();
}
}
}
contract B {
function b() external {
A a = new A();
try a.a(50, false) {
assert(a.value() == 50);
} catch {
assert(false);
}
a = new A();
try a.a(50, true) {
assert(false);
} catch {
assert(a.value() == 0);
}
}
}
```