Suppose you want to do integer arithmetic that saturates instead of overflowing. The built-in operator+ doesn’t behave that way, so you need to roll something yourself. Do you write a saturating_add() function or a new saturating_int type with overloaded operator+? What about atomic_load(x) vs. atomic x? Or volatile_store(ptr, value) vs. volatile int*? When should you provide functions that implement new behavior and when should you write a wrapper type? Let’s look at the pro and cons.