I'm still confused as to why there should be an ambiguity about this section of the XS file:
MySettings::set(const string &key, const string &value)
When the error produced by the code shows that we have what looks like a matching method:
MyModule.c:64: no matching function for call to `Mysettings::set (cons
+t string *, const string *)'
/usr/local/include/mysettings.h:66: candidates are: void Mysettings::s
+et(const string &, const string &)
Does XS not distinguish well between pointers and references?
MySet does have a typemap entry, of type O_OBJECT. I'll admit my understanding of typemaps is basic; this is just taken from the combining C++ and Perl link above.