Get rid of -Wtype-limits warning
diff --git a/tinyxml2.cpp b/tinyxml2.cpp
index 4a1573f..ea8088c 100755
--- a/tinyxml2.cpp
+++ b/tinyxml2.cpp
@@ -1914,6 +1914,26 @@
     return _errorID;

 }

 

+// This is likely overengineered template art to have a check that unsigned long value incremented

+// by one still fits into size_t. If size_t type is larger than unsigned long type

+// (x86_64-w64-mingw32 target) then the check is redundant and gcc and clang emit

+// -Wtype-limits warning. This piece makes the compiler select code with a check when a check

+// is useful and code with no check when a check is redundant depending on how size_t and unsigned long

+// types sizes relate to each other.

+template

+<bool = (sizeof(unsigned long) >= sizeof(size_t))>

+struct LongFitsIntoSizeTMinusOne {

+    static bool Fits( unsigned long value )

+    {

+        return value < (size_t)-1;

+    }

+};

+

+template <>

+bool LongFitsIntoSizeTMinusOne<false>::Fits( unsigned long /*value*/ )

+{

+    return true;

+}

 

 XMLError XMLDocument::LoadFile( FILE* fp )

 {

@@ -1933,7 +1953,7 @@
         return _errorID;

     }

 

-    if ( (unsigned long)filelength >= (size_t)-1 ) {

+    if ( !LongFitsIntoSizeTMinusOne<>::Fits( filelength ) ) {

         // Cannot handle files which won't fit in buffer together with null terminator

         SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 );

         return _errorID;