Fixed kvp-value delete

Delete wasn't being called properly due to bad template resolution.
This commit is contained in:
lmat 2014-10-31 12:35:59 -04:00 committed by John Ralls
parent 8eae1d8f44
commit 6c2a42bf49

View File

@ -291,33 +291,35 @@ compare(const KvpValueImpl * one, const KvpValueImpl * two) noexcept
return compare(*one, *two); return compare(*one, *two);
} }
template <typename T> void struct delete_visitor : boost::static_visitor<void>
delete_value(T & value)
{ {
/*do nothing*/ template <typename T> void
} operator()(T &) { /*do nothing*/ }
};
template <> void template <> void
delete_value(GList * & value) delete_visitor::operator()(GList * & value)
{ {
kvp_glist_delete(value); kvp_glist_delete(value);
} }
template <> void template <> void
delete_value(gchar * & value) delete_visitor::operator()(gchar * & value)
{ {
g_free(value); g_free(value);
} }
template <> void template <> void
delete_value(GncGUID * & value) delete_visitor::operator()(GncGUID * & value)
{ {
guid_free(value); guid_free(value);
} }
template <> void template <> void
delete_value(KvpFrame * & value) delete_visitor::operator()(KvpFrame * & value)
{ {
kvp_frame_delete(value); kvp_frame_delete(value);
} }
KvpValueImpl::~KvpValueImpl() noexcept KvpValueImpl::~KvpValueImpl() noexcept
{ {
delete_value(datastore); delete_visitor d;
boost::apply_visitor(d, datastore);
} }