次のプログラムがあるとします。
#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ではコンパイルされません。暗黙的にaからaGenericType
に変換したいので問題が発生しますが、aを返す可能性もあるため、あいまいさがあります(両方が一致します)。int
char
string
operator=(char)
operator=(string)
GenericType
ただし、コピーコンストラクターは問題ありません。
私の質問は、mainの内容を変更せずに、このあいまいさを解決するにはどうすればよいですか?GenericType
この状況を処理するために変更するには何をする必要がありますか?