From 6c2a42bf4957210b11aaaa7b2c9abc51515a2d70 Mon Sep 17 00:00:00 2001 From: lmat Date: Fri, 31 Oct 2014 12:35:59 -0400 Subject: [PATCH] Fixed kvp-value delete Delete wasn't being called properly due to bad template resolution. --- src/libqof/qof/kvp-value.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/libqof/qof/kvp-value.cpp b/src/libqof/qof/kvp-value.cpp index bbf6ccd634..4df79c33fb 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 void -delete_value(T & value) +struct delete_visitor : boost::static_visitor { - /*do nothing*/ -} + template 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); }