Issue 94: Dynamic::operator != overload has similar conversions
Status:  Fixed
Owner: ----
Closed:  Jan 2011
Reported by michaelbaczynski@gmail.com, Jan 21, 2011
using latest haXe/hxcpp version from svn, compilation fails with:
./src/Main.cpp(44) : error C2666: 'Dynamic::operator !=' : 7 overloads have similar conversions
        c:\motion-twin\haxe\lib\hxcpp\2,06,1\include\Dynamic.h(69): could be 'bool Dynamic::operator !=(bool) const'
        c:\motion-twin\haxe\lib\hxcpp\2,06,1\include\Dynamic.h(68): or       'bool Dynamic::operator !=(int) const'
        c:\motion-twin\haxe\lib\hxcpp\2,06,1\include\Dynamic.h(67): or       'bool Dynamic::operator !=(double) const'
        or       'built-in C++ operator!=(double, unsigned long)'
        or       'built-in C++ operator!=(int, unsigned long)'
        or       'built-in C++ operator!=(unsigned char, unsigned long)'
        or       'built-in C++ operator!=(bool, unsigned long)'
        while trying to match the argument list '(Dynamic, unsigned long)'

I guess it's related to  issue #70  (https://code.google.com/p/hxcpp/issues/detail?id=70&can=1)

interface A<T> {}

interface B<T> implements A<T>
{
	function foo(x:T):Void;
}

class Main implements B<Int>
{
	inline public static var C = 0x80000000;
	
	public function new() {}
	
	public function foo(x:Int):Void
	{
		var bool = x != C;
	}
}
Jan 21, 2011
Project Member #1 gameh...@gmail.com
Actually, this one is a bit simpler. The big constant was interpreted as a unsigned long, rather than an int when inlined.  A simple typecast fixes this.
Status: Fixed