GCC seems to be generating an out-of-line function call to implement the trapped addition, which is going to inhibit a lot of other optimizations like vectorization:
https://gcc.godbolt.org/z/zj6qbn
By contrast, Clang is not:
https://gcc.godbolt.org/z/r7avno
Btw if you only need overflow checking in a few places, you can use overflow detecting intrinsics:
https://gcc.gnu.org/onlinedocs/gcc/Integer-Overflow-Builtins...
In C++, this is going to be way more useful than -ftrapv anyway, since in a lot of situations you're dealing with user input and you're probably going to want to throw, not abort.