enable warning 4238 - non-standard extension: class rvalue used as lvalue
enable warning 4245 - arg conversion signed/unsigned mismatch