bug with relaxation on mega2560

I tried removing the relax option and while it did allow my large program to compile, this problem has arisen:

int foo = 300;
String s = String(foo, DEC);

That used to compile, but now it fails with,

error: call of overloaded 'String(uint16_t&, int)' is ambiguous

DEC is defined in Print.h in the Arduino 1.0.5 source code here,

#define DEC 10
#define HEX 16
#define OCT 8
#define BIN 2

if we change the (new) problem code to this, casting the DEC to an unsigned char, all is well, but that's a pain. Is there another simple way to fix this without defining typed consts to replace the defines? I wonder what else won't work with --relax removed...

int foo = 300;
String s = String(foo, (unsigned char)DEC);

Update, I have a larger complex program and it may not cover all the things that might also not work but changing the defines of DEC, HEX... to typed constants seems to let things compile normally:

This is in Print.h in the Arduino IDE 1.0.5 source code. On OS X this is located here in the root (of the source code),

/hardware/arduino/cores/arduino/Print.h on line 29...32

// #define DEC 10
// #define HEX 16
// #define OCT 8
// #define BIN 2
const uint8_t DEC = 10;
const uint8_t HEX = 16;
const uint8_t OCT = 8;
const uint8_t BIN = 2;