There is a good reason why one would like to allow it though: it allows something similar to class extensions.
For example, let's day one module defines a "string" struct, which then is a char pointer + length.
The code has a String.find(char *) function, but is missing String.beginsWith and String.endsWith – which are really useful for some string handling.
Obviously you can define string_begins_with and string_ends_with, but it will be less nice to have:
if (string_begins_with(string, "foo")) {
return string.toUpper();
}
When we could have:
if (string.beginsWith("foo")) {
return string.toUpper();
}
At least of me it's common to build up a complementary library of additional functions on various types. In many languages we are forced to create stand-alone functions, because the class definition is closed. In languages like Objective-C – or in any language with UFCS, we have the option to let ourselves extend this definition (regardless wether we are struct-based or use OO).