Nothing's mentioned there(official docs) about use cases for {$modeswitch advancedrecords} in a context of operator overloading.
_You_ are the one using advanced records, ergo you need the modeswitch. Don't use advanced records and you won't need the switch. Simple as that, and as explained in the documentation about generics that you linked to.
If one never used Delphi, he would be clueless about such feature(operator overloading in advanced records).
Pardon but you was the one linking to generics documentation, not advanced records. Please do not confuse the two as they are a different kind of breed.
The advanced record as shown in that documentation you linked to only serves as a _type_ for which the generics class is specialized to.
I suppose this form of operator overloading is visible only in a unit it was defined in.
Therefore it's not visible to an external library unit, and compiler says "operator not overloaded" when compiling that library unit .
Are you honestly saying that you have no idea how to declare functions and procedures in the interface section of a unit and let your other unit/program uses that unit so that unit can use those functions and procedures ?
Guess what: that also works for operators ;-)
If a record is passed to a library, that record must contain operator overloading inside its definition. So only advancedrecords works in this case.
Also wrong. Only if you want it to.
You simply do not have to if you use classes *period*
And yes, you can use class/records operators wherever you want (edit: might even be preferred) but afaik never required as you currently seem to think.
edit:
the reason i pointed you to generic operator overloading is that it seems the only documentation available about operator overloading, e.g. there does not seem specific documentation on using class operators and/or record operators. i was even unable to find anything on advanced records inside the online manual (but perhaps i overlooked). Thus, read what i linked to and apply for your situation. If that means you want to use record operators and/or class operators then simply use that :-)
edit2:
Oh, i might have been using some wrong wording there (or at least might work confusing). Yes, you need a record in case you want to enclose the operator declaration inside your class.