Betrachten Sie den folgenden Code.
#include <iostream>
#include <string>
struct SimpleStruct
{
operator std::string () { return value; }
std::string value;
};
int main ()
{
std::string s; // An empty string.
SimpleStruct x; // x.value constructed as an empty string.
bool less = s < x; // Error here.
return 0;
}
Dieser Code lässt sich weder mit g++ noch mit Microsoft Visual C++ kompilieren. Der von den Compilern ausgegebene Fehlerbericht lautet no match for operator '<' in 's < x'
. Die Frage ist, warum konvertiert der Compiler nicht einfach die SimpleStruct x
a string
nach den gegebenen operator string ()
und verwenden Sie dann operator < ( string, string )
?