This is not a multimethod. The underlying types of the
arguments of + must be the same
or the behavior is undefined. This example is correct because the arguments
both hold int's.

Note

Adding relaxed
leads an exception rather than undefined behavior if the argument types are
wrong.

addable<> requires the types of the arguments
to be exactly the same. This doesn't cover all uses of addition though. For
example, pointer arithmetic takes a pointer and an integer and returns a pointer.
We can capture this kind of relationship among several types by identifying
each type involved with a placeholder. We'll let the placeholder _a represent the pointer and the placeholder
_b represent the integer.