Patching up incorrect boilerplate code. Added clone/equal methods.
diff --git a/xmltest.cpp b/xmltest.cpp
index 9f61a6b..b3ffc2f 100644
--- a/xmltest.cpp
+++ b/xmltest.cpp
@@ -302,11 +302,15 @@
 		int okay = 0;

 

 

+#if defined(_MSC_VER)

 #pragma warning ( push )

 #pragma warning ( disable : 4996 )		// Fail to see a compelling reason why this should be deprecated.

+#endif

 		FILE* saved  = fopen( "utf8testout.xml", "r" );

 		FILE* verify = fopen( "utf8testverify.xml", "r" );

+#if defined(_MSC_VER)

 #pragma warning ( pop )

+#endif

 

 		if ( saved && verify )

 		{

@@ -419,20 +423,28 @@
 

 		XMLTest( "Entity transformation: read. ", expected, context, true );

 

+#if defined(_MSC_VER)

 #pragma warning ( push )

 #pragma warning ( disable : 4996 )		// Fail to see a compelling reason why this should be deprecated.

+#endif

 		FILE* textfile = fopen( "textfile.txt", "w" );

+#if defined(_MSC_VER)

 #pragma warning ( pop )

+#endif

 		if ( textfile )

 		{

 			XMLPrinter streamer( textfile );

 			psg->Accept( &streamer );

 			fclose( textfile );

 		}

+#if defined(_MSC_VER)

 #pragma warning ( push )

 #pragma warning ( disable : 4996 )		// Fail to see a compelling reason why this should be deprecated.

+#endif

 		textfile = fopen( "textfile.txt", "r" );

+#if defined(_MSC_VER)

 #pragma warning ( pop )

+#endif

 		TIXMLASSERT( textfile );

 		if ( textfile )

 		{

@@ -618,6 +630,28 @@
 		XMLTest( "Infinite loop test.", true, true );

 	}

 #endif

+	{

+		const char* pub = "<?xml version='1.0'?> <element><sub/></element> <!--comment--> <!DOCTYPE>";

+		XMLDocument doc;

+		doc.Parse( pub );

+

+		XMLDocument clone;

+		for( const XMLNode* node=doc.FirstChild(); node; node=node->NextSibling() ) {

+			XMLNode* copy = node->ShallowClone( &clone );

+			clone.InsertEndChild( copy );

+		}

+

+		clone.Print();

+

+		int count=0;

+		const XMLNode* a=clone.FirstChild();

+		const XMLNode* b=doc.FirstChild();

+		for( ; a && b; a=a->NextSibling(), b=b->NextSibling() ) {

+			++count;

+			XMLTest( "Clone and Equal", true, a->ShallowEqual( b ));

+		}

+		XMLTest( "Clone and Equal", 4, count );

+	}

 

 	#if defined( _MSC_VER )

 		_CrtMemCheckpoint( &endMemState );