> In a language like Java, I could write this function to accept any type for which the + operator is valid, and it would still be type safe at compile time. I would not need to assert the types like I did above.
That's because + is a java built-in unavailable to normal types. Usually something like an add method is used instead. It does not detract from the underlying point.
Really? No. Not in Java.
"error: bad operand types for binary operator '+'"