Дана следующая программа:
#include <iostream>
#include <string>
using namespace std;
struct GenericType{
operator string(){
return "Hello World";
}
operator int(){
return 111;
}
operator double(){
return 123.4;
}
};
int main(){
int i = GenericType();
string s = GenericType();
double d = GenericType();
cout << i << s << d << endl;
i = GenericType();
s = GenericType(); //This is the troublesome line
d = GenericType();
cout << i << s << d << endl;
}
Она компилируется в Visual Studio 11, но не в clang или gcc. У него проблемы, потому что он хочет неявно преобразовать из GenericType
в int
в char
, но также может вернуть строку . поэтому возникает двусмысленность (
operator=(char)
и operator=(string)
оба соответствуют GenericType
).
Однако с конструктором копирования все в порядке.
Мой вопрос: как разрешить эту двусмысленность без изменения содержимого main? Что мне нужно сделать, чтобы изменить GenericType
, чтобы справиться с этой ситуацией?