aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Kummerlaender2020-04-25 20:42:08 +0200
committerAdrian Kummerlaender2020-04-25 20:42:08 +0200
commit6d353960542e5c95f29d45b9359db25945a414a4 (patch)
treecfdc4fdc02a3bf89c73708380d71774b9445ae8a
parentd4f3c3d2f61616e09d01cc927ba0dbdc393d25a0 (diff)
downloadInputXSLT-master.tar
InputXSLT-master.tar.gz
InputXSLT-master.tar.bz2
InputXSLT-master.tar.xz
InputXSLT-master.zip
Fix std::unique_ptr custom deleter issueHEADmaster
Somehow the previous custom deleter for xercesc::DOMDocument fails invokable assertions planet a compiler update. A lambda function with the same signature wors for some reason…
-rw-r--r--src/support/dom/document_cache.cc15
-rw-r--r--src/support/dom/document_cache.h9
2 files changed, 10 insertions, 14 deletions
diff --git a/src/support/dom/document_cache.cc b/src/support/dom/document_cache.cc
index c000aef..0133234 100644
--- a/src/support/dom/document_cache.cc
+++ b/src/support/dom/document_cache.cc
@@ -11,7 +11,10 @@ namespace InputXSLT {
auto DomDocumentCache::createDocument() -> document_ptr {
return document_ptr(
- xercesc::DOMImplementation::getImplementation()->createDocument()
+ xercesc::DOMImplementation::getImplementation()->createDocument(),
+ [](xercesc::DOMDocument* ptr) {
+ ptr->release();
+ }
);
}
@@ -21,7 +24,10 @@ auto DomDocumentCache::createDocument(const std::string& name) -> document_ptr {
nullptr,
*XercesStringGuard<XMLCh>(name),
nullptr
- )
+ ),
+ [](xercesc::DOMDocument* ptr) {
+ ptr->release();
+ }
);
}
@@ -41,9 +47,4 @@ xalan::XalanDocument* DomDocumentCache::create(document_ptr&& document) {
return this->cache_.top()->getXalanDocument();
}
-void DomDocumentCache::document_deleter::operator()(
- xercesc::DOMDocument* document) {
- document->release();
-}
-
}
diff --git a/src/support/dom/document_cache.h b/src/support/dom/document_cache.h
index f472249..115d194 100644
--- a/src/support/dom/document_cache.h
+++ b/src/support/dom/document_cache.h
@@ -8,22 +8,17 @@
#include <mutex>
#include <stack>
#include <memory>
+#include <functional>
#include "common.h"
namespace InputXSLT {
class DomDocumentCache {
- class document_deleter {
- friend std::unique_ptr<xercesc::DOMDocument, document_deleter>;
-
- void operator()(xercesc::DOMDocument*);
- };
-
public:
typedef std::unique_ptr<
xercesc::DOMDocument,
- document_deleter
+ std::function<void(xercesc::DOMDocument*)>
> document_ptr;
static document_ptr createDocument();