#include <iostream>
template <typename T>
struct Argument {
explicit Argument( const T &val );
T get() const;
};
template <typename T>
Argument<T>::Argument(const T &val) { }
class Foo {
public:
typedef Argument<double> Val1;
typedef Argument<double> Val2;
Foo( Val1 v1, Val2 v2 );
};
Foo::Foo(Val1, Val2) { }
int main() {
Foo foo1( Foo::Val1( 1.0 ), Foo::Val2( 2.3 ) );
Foo foo2( Foo::Val2( 1.0 ), Foo::Val1( 2.3 ) );
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBBcmd1bWVudCB7CiAgICBleHBsaWNpdCBBcmd1bWVudCggY29uc3QgVCAmdmFsICk7CiAgICBUIGdldCgpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CkFyZ3VtZW50PFQ+OjpBcmd1bWVudChjb25zdCBUICZ2YWwpIHsgfQoKY2xhc3MgRm9vIHsKcHVibGljOgogICAgICAgdHlwZWRlZiBBcmd1bWVudDxkb3VibGU+IFZhbDE7CiAgICAgICB0eXBlZGVmIEFyZ3VtZW50PGRvdWJsZT4gVmFsMjsKCiAgICAgICBGb28oIFZhbDEgdjEsIFZhbDIgdjIgKTsKfTsKCkZvbzo6Rm9vKFZhbDEsIFZhbDIpIHsgfQoKaW50IG1haW4oKSB7CiAJRm9vIGZvbzEoIEZvbzo6VmFsMSggMS4wICksIEZvbzo6VmFsMiggMi4zICkgKTsKIAlGb28gZm9vMiggRm9vOjpWYWwyKCAxLjAgKSwgRm9vOjpWYWwxKCAyLjMgKSApOwogCQoJcmV0dXJuIDA7Cn0=