Test on gcc. Fix warning. Fix uneeded params. Up VS debug to level 4 and fix warnings.
diff --git a/tinyxml2.cpp b/tinyxml2.cpp
index fb2590c..6115346 100644
--- a/tinyxml2.cpp
+++ b/tinyxml2.cpp
@@ -27,10 +27,9 @@
 #include <stdlib.h>

 #include <stdio.h>

 #include <ctype.h>

-#include <new.h>

+#include <new>

 #include <stdarg.h>

 

-//#pragma warning ( disable : 4291 )

 

 using namespace tinyxml2;

 

@@ -403,8 +402,11 @@
 	static const int cdataHeaderLen		= 9;

 	static const int elementHeaderLen	= 1;

 

+#pragma warning ( push )

+#pragma warning ( disable : 4127 )

 	TIXMLASSERT( sizeof( XMLComment ) == sizeof( XMLUnknown ) );		// use same memory pool

 	TIXMLASSERT( sizeof( XMLComment ) == sizeof( XMLDeclaration ) );	// use same memory pool

+#pragma warning (pop)

 

 	if ( XMLUtil::StringEqual( p, xmlHeader, xmlHeaderLen ) ) {

 		returnNode = new (commentPool.Alloc()) XMLDeclaration( this );

@@ -985,7 +987,7 @@
 {

 	XMLAttribute* attrib = FindAttribute( name );

 	if ( !attrib ) {

-		attrib = new (document->attributePool.Alloc() ) XMLAttribute( this );

+		attrib = new (document->attributePool.Alloc() ) XMLAttribute();

 		attrib->memPool = &document->attributePool;

 		LinkAttribute( attrib );

 		attrib->SetName( name );

@@ -1041,7 +1043,7 @@
 

 		// attribute.

 		if ( XMLUtil::IsAlpha( *p ) ) {

-			XMLAttribute* attrib = new (document->attributePool.Alloc() ) XMLAttribute( this );

+			XMLAttribute* attrib = new (document->attributePool.Alloc() ) XMLAttribute();

 			attrib->memPool = &document->attributePool;

 

 			p = attrib->ParseDeep( p );

@@ -1080,7 +1082,6 @@
 	// Read the element name.

 	p = XMLUtil::SkipWhiteSpace( p );

 	if ( !p ) return 0;

-	const char* start = p;

 

 	// The closing element is the </element> form. It is

 	// parsed just like a regular element then deleted from

@@ -1093,7 +1094,6 @@
 	p = value.ParseName( p );

 	if ( value.Empty() ) return 0;

 

-	bool elementClosed=false;

 	p = ParseAttributes( p );

 	if ( !p || !*p || closingType ) 

 		return p;

@@ -1318,12 +1318,12 @@
 	for( int i=0; i<NUM_ENTITIES; ++i ) {

 		TIXMLASSERT( entities[i].value < ENTITY_RANGE );

 		if ( entities[i].value < ENTITY_RANGE ) {

-			entityFlag[ entities[i].value ] = true;

+			entityFlag[ (int)entities[i].value ] = true;

 		}

 	}

-	restrictedEntityFlag['&'] = true;

-	restrictedEntityFlag['<'] = true;

-	restrictedEntityFlag['>'] = true;	// not required, but consistency is nice

+	restrictedEntityFlag[(int)'&'] = true;

+	restrictedEntityFlag[(int)'<'] = true;

+	restrictedEntityFlag[(int)'>'] = true;	// not required, but consistency is nice

 	buffer.Push( 0 );

 }

 

@@ -1354,7 +1354,7 @@
 		#else

 			int len = vsnprintf( 0, 0, format, va );

 			char* p = buffer.PushArr( len ) - 1;

-			vsprintf_s( p, len+1, format, va );

+			vsnprintf( p, len+1, format, va );

 		#endif

 	}

     va_end( va );

@@ -1556,7 +1556,7 @@
 }

 

 

-bool XMLPrinter::VisitExit( const XMLElement& element )

+bool XMLPrinter::VisitExit( const XMLElement& )

 {

 	CloseElement();

 	return true;

diff --git a/tinyxml2.h b/tinyxml2.h
index bff6250..d0d0a83 100644
--- a/tinyxml2.h
+++ b/tinyxml2.h
@@ -33,6 +33,9 @@
 /* TODO: create main page description.

    TODO: add 'lastAttribute' for faster parsing.

 */

+/*

+	gcc: g++ -Wall tinyxml2.cpp xmltest.cpp -o gccxmltest.exe

+*/

 

 #if defined( _DEBUG ) || defined( DEBUG ) || defined (__DEBUG__)

 	#ifndef DEBUG

@@ -720,15 +723,15 @@
 	    If the value isn't an integer, 0 will be returned. There is no error checking;

 		use QueryIntAttribute() if you need error checking.

 	*/

-	int		 IntAttribute( const char* name ) const		{ int i=0;		QueryIntAttribute( &i );		return i; }

+	int		 IntAttribute() const				{ int i=0;		QueryIntAttribute( &i );		return i; }

 	/// Query as an unsigned integer. See IntAttribute()

-	unsigned UnsignedAttribute( const char* name ) const{ unsigned i=0; QueryUnsignedAttribute( &i );	return i; }

+	unsigned UnsignedAttribute() const			{ unsigned i=0; QueryUnsignedAttribute( &i );	return i; }

 	/// Query as a boolean. See IntAttribute()

-	bool	 BoolAttribute( const char* name ) const	{ bool b=false; QueryBoolAttribute( &b );		return b; }

+	bool	 BoolAttribute() const				{ bool b=false; QueryBoolAttribute( &b );		return b; }

 	/// Query as a double. See IntAttribute()

-	double 	 DoubleAttribute( const char* name ) const	{ double d=0;	QueryDoubleAttribute( &d );		return d; }

+	double 	 DoubleAttribute() const			{ double d=0;	QueryDoubleAttribute( &d );		return d; }

 	/// Query as a float. See IntAttribute()

-	float	 FloatAttribute( const char* name ) const	{ float f=0;	QueryFloatAttribute( &f );		return f; }

+	float	 FloatAttribute() const				{ float f=0;	QueryFloatAttribute( &f );		return f; }

 

 	/** QueryIntAttribute interprets the attribute as an integer, and returns the value

 		in the provided paremeter. The function will return XML_NO_ERROR on success,

@@ -760,7 +763,7 @@
 private:

 	enum { BUF_SIZE = 200 };

 

-	XMLAttribute( XMLElement* element ) : next( 0 ) {}

+	XMLAttribute() : next( 0 ) {}

 	virtual ~XMLAttribute()	{}

 	XMLAttribute( const XMLAttribute& );	// not supported

 	void operator=( const XMLAttribute& );	// not supported

diff --git a/tinyxml2/tinyxml2.vcxproj b/tinyxml2/tinyxml2.vcxproj
index d3716bd..f4d20a2 100644
--- a/tinyxml2/tinyxml2.vcxproj
+++ b/tinyxml2/tinyxml2.vcxproj
@@ -47,7 +47,7 @@
     <ClCompile>

       <PrecompiledHeader>

       </PrecompiledHeader>

-      <WarningLevel>Level3</WarningLevel>

+      <WarningLevel>Level4</WarningLevel>

       <Optimization>Disabled</Optimization>

       <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

     </ClCompile>

diff --git a/xmltest.cpp b/xmltest.cpp
index 357ef67..cda1c43 100644
--- a/xmltest.cpp
+++ b/xmltest.cpp
@@ -69,7 +69,7 @@
 }

 

 

-int main( int argc, const char* argv )

+int main( int /*argc*/, const char* /*argv*/ )

 {

 	#if defined( _MSC_VER )

 		_CrtMemCheckpoint( &startMemState );

@@ -621,4 +621,4 @@
 

 	printf ("\nPass %d, Fail %d\n", gPass, gFail);

 	return 0;

-}
\ No newline at end of file
+}