In some frameworks (MFC, for instance), it’s customary to add the scope resolution operator :: before a global function’s name to mark it explicitly as a function that is not a class member.
void String::operator = (const String& other) { ::strcpy (this->buffer, &other); // strcpy is preceded by :: operator, not a good idea}
This practice is not recommended anymore. Many of the standard functions that used to be global are now grouped under namespaces. For example, strcpy() now belongs to namespace std, and so are most of the Standard Library’s functions. Putting the scope resolution operator before them will stymie the lookup algorithm of the compiler, resulting in compilation errors. Therefore, it’s advisable to leave the function’s name without the scope resolution operator.