gnucash master: Fixed kvp-value delete

John Ralls jralls at code.gnucash.org
Fri Oct 31 15:08:27 EDT 2014


Updated	 via  https://github.com/Gnucash/gnucash/commit/6c2a42bf (commit)
	from  https://github.com/Gnucash/gnucash/commit/8eae1d8f (commit)



commit 6c2a42bf4957210b11aaaa7b2c9abc51515a2d70
Author: lmat <dartme18 at gmail.com>
Date:   Fri Oct 31 12:35:59 2014 -0400

    Fixed kvp-value delete
    
    Delete wasn't being called properly due to bad template resolution.

diff --git a/src/libqof/qof/kvp-value.cpp b/src/libqof/qof/kvp-value.cpp
index bbf6ccd..4df79c3 100644
--- a/src/libqof/qof/kvp-value.cpp
+++ b/src/libqof/qof/kvp-value.cpp
@@ -291,33 +291,35 @@ compare(const KvpValueImpl * one, const KvpValueImpl * two) noexcept
     return compare(*one, *two);
 }
 
-template <typename T> void
-delete_value(T & value)
+struct delete_visitor : boost::static_visitor<void>
 {
-    /*do nothing*/
-}
+    template <typename T> void 
+    operator()(T &) { /*do nothing*/ }
+};
+
 template <> void
-delete_value(GList * & value)
+delete_visitor::operator()(GList * & value)
 {
     kvp_glist_delete(value);
 }
 template <> void
-delete_value(gchar * & value)
+delete_visitor::operator()(gchar * & value)
 {
     g_free(value);
 }
 template <> void
-delete_value(GncGUID * & value)
+delete_visitor::operator()(GncGUID * & value)
 {
     guid_free(value);
 }
 template <> void
-delete_value(KvpFrame * & value)
+delete_visitor::operator()(KvpFrame * & value)
 {
     kvp_frame_delete(value);
 }
 
 KvpValueImpl::~KvpValueImpl() noexcept
 {
-    delete_value(datastore);
+    delete_visitor d;
+    boost::apply_visitor(d, datastore);
 }



Summary of changes:
 src/libqof/qof/kvp-value.cpp | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)



More information about the gnucash-changes mailing list