#include <stdio.h>
class Double
{
public :
} ;
class Float
{
public :
operator Double( ) { printf ( "Float to Double\n " ) ; return Double( ) ; }
} ;
Double operator + ( Double left, Double right ) { printf ( "::operator+(Double,Double)\n " ) ; return Double( ) ; }
int main( void )
{
Double d;
Float f;
printf ( "[0]\n " ) ;
f + f;
printf ( "[1]\n " ) ;
d + d;
printf ( "[2]\n " ) ;
d + f; // fはDoubleへ暗黙の型変換が発生する。
printf ( "[3]\n " ) ;
f + d; // fはDoubleへ暗黙の型変換が発生する。
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgpjbGFzcyBEb3VibGUKewpwdWJsaWM6Cn07CmNsYXNzIEZsb2F0CnsKcHVibGljOgogIG9wZXJhdG9yIERvdWJsZSgpeyBwcmludGYoICJGbG9hdCB0byBEb3VibGVcbiIgKTsgcmV0dXJuIERvdWJsZSgpOyB9Cn07CgpEb3VibGUgb3BlcmF0b3IgKyggRG91YmxlIGxlZnQsIERvdWJsZSByaWdodCApeyBwcmludGYoICI6Om9wZXJhdG9yKyhEb3VibGUsRG91YmxlKVxuIiApOyByZXR1cm4gRG91YmxlKCk7IH0KCgppbnQgbWFpbiggdm9pZCApCnsKICAgIERvdWJsZSAgZDsKICAgIEZsb2F0ICAgZjsKICAgIAogICAgcHJpbnRmKCAiWzBdXG4iICk7IAogICAgZiArIGY7CiAgICAKICAgIHByaW50ZiggIlsxXVxuIiApOyAKICAgIGQgKyBkOwogICAgCiAgICBwcmludGYoICJbMl1cbiIgKTsKICAgIGQgKyBmOyAvLyBm44GvRG91Ymxl44G45pqX6buZ44Gu5Z6L5aSJ5o+b44GM55m655Sf44GZ44KL44CCCiAgICAKICAgIHByaW50ZiggIlszXVxuIiApOwogICAgZiArIGQ7IC8vIGbjga9Eb3VibGXjgbjmmpfpu5njga7lnovlpInmj5vjgYznmbrnlJ/jgZnjgovjgIIKICAgIAogICAgcmV0dXJuIDA7Cn0=