Here is some code that compiled with VC70 and earlier but no longer
compiles with VC71:

#include

class foo {
public:
foo(UINT_PTR a = ~0, UINT_PTR b = 4);
}

The error is:

C2226: syntax error :unexpected type 'UINT_PTR"

Now I understand ~0 is a different type from UINT_PTR, but I don't
think that is the problem here. If I replace the constructor with
either of the following it compiles ok:

foo(UNIT_PTR a = 4, UINT_PTR b = 4);
foo(UINT_PTR a = ~0, int b = 4);

However the following also fails:

foo(int x = ~0, UINT_PTR y);

C2062: type "int" unexpected.

So the problem is not the "~0" by itself, nor is it having two
UINT_PTR values. It only appears to break if a ~0 default arg is
followed by a UINT_PTR.

Anyone have any idea what is going on here?

Thanks in advance,
Martin