Well, they didn't stop at concepts as contracts to be checked, instead they let you have a different oveload called depending on what concepts your argument types implement. Hence the problem with having to sift through potential overloads and reasons for rejection.