Почему компилятор не выполняет преобразование типа?

Рассмотрим следующий код.

#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;
}

Этот код не скомпилируется либо на G ++, ни Microsoft Visual C ++. Отчет об ошибках, заданный компиляторами, является , не совпадает с матчей для оператора '<' S . Вопрос в том, почему компилятор не просто преобразует SimpleStruct x на строку на в соответствии с данным string оператора () , а затем используйте Оператор <( Строка, строка) ?

10
задан Peter Mortensen 8 February 2012 в 20:31
поделиться