Because the operator must have either a class, an enumerator list object, or a "this" pointer as a parameter. On line 7, you're using the "operator + ( )" member-function of "std::string" which has a "this" pointer and a class ["std::string"] as a parameter.
Because intrinsic types such as "int" are not classes, they don't have a "this" pointer.
Actually operator+ is one of the operators that may be declared in the global scope. If it were a member of std::string I would have to write std::string::operator+ and I would have to use reference-to-member-function syntax.