@@ -841,9 +841,11 @@ private CharSequence generatePrimitiveFieldMetaData(final String propertyName, f
841841 {
842842 final  StringBuilder  sb  = new  StringBuilder ();
843843
844-  final  PrimitiveType  primitiveType  = token .encoding ().primitiveType ();
844+  final  Encoding  encoding  = token .encoding ();
845+  final  PrimitiveType  primitiveType  = encoding .primitiveType ();
845846 final  String  cpp98TypeName  = cpp98TypeName (primitiveType );
846- 
847+  final  CharSequence  nullValueString  = generateNullValueLiteral (primitiveType , encoding );
848+  
847849 sb .append (String .format (
848850 "\n "  +
849851 indent  + " static const %1$s %2$sNullValue()\n "  +
@@ -852,7 +854,7 @@ private CharSequence generatePrimitiveFieldMetaData(final String propertyName, f
852854 indent  + " }\n " ,
853855 cpp98TypeName ,
854856 propertyName ,
855-  generateLiteral ( primitiveType ,  token . encoding (). applicableNullValue (). toString ()) 
857+  nullValueString 
856858 ));
857859
858860 sb .append (String .format (
@@ -1432,6 +1434,40 @@ private Object generateCompositeProperty(final String propertyName, final Token
14321434 return  sb ;
14331435 }
14341436
1437+  private  CharSequence  generateNullValueLiteral (final  PrimitiveType  primitiveType , final  Encoding  encoding )
1438+  {
1439+  // Visual C++ does not handle minimum integer values properly 
1440+  // See: http://msdn.microsoft.com/en-us/library/4kh09110.aspx 
1441+  // So some of the null values get special handling 
1442+  if (null  == encoding .nullValue ())
1443+  {
1444+  switch  (primitiveType )
1445+  {
1446+  case  CHAR :
1447+  case  FLOAT :
1448+  case  DOUBLE :
1449+  break ; // no special handling 
1450+  case  INT8 :
1451+  return  "SCHAR_MIN" ;
1452+  case  INT16 :
1453+  return  "SHRT_MIN" ;
1454+  case  INT32 :
1455+  return  "LONG_MIN" ;
1456+  case  INT64 :
1457+  return  "LLONG_MIN" ;
1458+  case  UINT8 :
1459+  return  "UCHAR_MAX" ;
1460+  case  UINT16 :
1461+  return  "USHRT_MAX" ;
1462+  case  UINT32 :
1463+  return  "ULONG_MAX" ;
1464+  case  UINT64 :
1465+  return  "ULLONG_MAX" ;
1466+  }
1467+  }
1468+  return  generateLiteral (primitiveType , encoding .applicableNullValue ().toString ());
1469+  }
1470+ 
14351471 private  CharSequence  generateLiteral (final  PrimitiveType  type , final  String  value )
14361472 {
14371473 String  literal  = "" ;
0 commit comments