diff options
| -rw-r--r-- | src/pugixml.cpp | 8 | ||||
| -rw-r--r-- | src/pugixml.hpp | 16 | ||||
| -rw-r--r-- | tests/test_xpath_api.cpp | 2 | ||||
| -rw-r--r-- | tests/test_xpath_variables.cpp | 2 | 
4 files changed, 19 insertions, 9 deletions
| diff --git a/src/pugixml.cpp b/src/pugixml.cpp index 4ae10b4..ccf8c4c 100644 --- a/src/pugixml.cpp +++ b/src/pugixml.cpp @@ -11923,7 +11923,7 @@ namespace pugi  		}  	} -#if __cplusplus >= 201103 || (defined(_MSC_VER) && _MSC_VER >= 1800) +#ifdef PUGIXML_HAS_MOVE  	PUGI__FN void xpath_node_set::_move(xpath_node_set& rhs)  	{  		_type = rhs._type; @@ -11966,7 +11966,7 @@ namespace pugi  		return *this;  	} -#if __cplusplus >= 201103 || (defined(_MSC_VER) && _MSC_VER >= 1800) +#ifdef PUGIXML_HAS_MOVE  	PUGI__FN xpath_node_set::xpath_node_set(xpath_node_set&& rhs): _type(type_unsorted), _begin(&_storage), _end(&_storage)  	{  		_move(rhs); @@ -12166,7 +12166,7 @@ namespace pugi  		return *this;  	} -#if __cplusplus >= 201103 || (defined(_MSC_VER) && _MSC_VER >= 1800) +#ifdef PUGIXML_HAS_MOVE  	PUGI__FN xpath_variable_set::xpath_variable_set(xpath_variable_set&& rhs)  	{  		for (size_t i = 0; i < sizeof(_data) / sizeof(_data[0]); ++i) @@ -12360,7 +12360,7 @@ namespace pugi  			impl::xpath_query_impl::destroy(static_cast<impl::xpath_query_impl*>(_impl));  	} -#if __cplusplus >= 201103 || (defined(_MSC_VER) && _MSC_VER >= 1800) +#ifdef PUGIXML_HAS_MOVE  	PUGI__FN xpath_query::xpath_query(xpath_query&& rhs)  	{  		_impl = rhs._impl; diff --git a/src/pugixml.hpp b/src/pugixml.hpp index 44ad066..795b391 100644 --- a/src/pugixml.hpp +++ b/src/pugixml.hpp @@ -72,6 +72,16 @@  #	endif  #endif +// If the platform is known to have move semantics support, compile move ctor/operator implementation +#ifndef PUGIXML_HAS_MOVE +#	if __cplusplus >= 201103 +#		define PUGIXML_HAS_MOVE +#	elif defined(_MSC_VER) && _MSC_VER >= 1800 +#		define PUGIXML_HAS_MOVE +#	endif +#endif + +  // If C++ is 2011 or higher, add 'override' qualifiers  #ifndef PUGIXML_OVERRIDE  #	if __cplusplus >= 201103 @@ -1117,7 +1127,7 @@ namespace pugi  		xpath_variable_set(const xpath_variable_set& rhs);  		xpath_variable_set& operator=(const xpath_variable_set& rhs); -	#if __cplusplus >= 201103 || (defined(_MSC_VER) && _MSC_VER >= 1800) +	#ifdef PUGIXML_HAS_MOVE  		// Move semantics support  		xpath_variable_set(xpath_variable_set&& rhs);  		xpath_variable_set& operator=(xpath_variable_set&& rhs); @@ -1161,7 +1171,7 @@ namespace pugi  		// Destructor  		~xpath_query(); -	#if __cplusplus >= 201103 || (defined(_MSC_VER) && _MSC_VER >= 1800) +	#ifdef PUGIXML_HAS_MOVE  		// Move semantics support  		xpath_query(xpath_query&& rhs);  		xpath_query& operator=(xpath_query&& rhs); @@ -1302,7 +1312,7 @@ namespace pugi  		xpath_node_set(const xpath_node_set& ns);  		xpath_node_set& operator=(const xpath_node_set& ns); -	#if __cplusplus >= 201103 || (defined(_MSC_VER) && _MSC_VER >= 1800) +	#ifdef PUGIXML_HAS_MOVE  		// Move semantics support  		xpath_node_set(xpath_node_set&& rhs);  		xpath_node_set& operator=(xpath_node_set&& rhs); diff --git a/tests/test_xpath_api.cpp b/tests/test_xpath_api.cpp index ef7d4b2..9aa1a34 100644 --- a/tests/test_xpath_api.cpp +++ b/tests/test_xpath_api.cpp @@ -418,7 +418,7 @@ TEST(xpath_api_empty)  	CHECK(!q.evaluate_boolean(c));  } -#if __cplusplus >= 201103 +#ifdef PUGIXML_HAS_MOVE  TEST_XML(xpath_api_nodeset_move_ctor, "<node><foo/><foo/><bar/></node>")  {  	xpath_node_set set = doc.select_nodes(STR("node/bar/preceding::*")); diff --git a/tests/test_xpath_variables.cpp b/tests/test_xpath_variables.cpp index d9603ce..2033a8e 100644 --- a/tests/test_xpath_variables.cpp +++ b/tests/test_xpath_variables.cpp @@ -474,7 +474,7 @@ TEST_XML(xpath_variables_copy_out_of_memory, "<node1 /><node2 />")  	CHECK(set2.get(STR("d"))->get_node_set().size() == 2);  } -#if __cplusplus >= 201103 +#ifdef PUGIXML_HAS_MOVE  TEST_XML(xpath_variables_move, "<node />")  {  	xpath_variable_set set; | 
