diff --git a/include/ircd/util/instance_multimap.h b/include/ircd/util/instance_multimap.h index 402754959..a06a08cbb 100644 --- a/include/ircd/util/instance_multimap.h +++ b/include/ircd/util/instance_multimap.h @@ -13,15 +13,16 @@ namespace ircd::util { - template struct instance_multimap; + template> struct instance_multimap; } /// See instance_list for purpose and overview. template + class T, + class C> struct ircd::util::instance_multimap { - static std::multimap map; + static std::multimap map; protected: typename decltype(map)::iterator it; @@ -36,8 +37,9 @@ struct ircd::util::instance_multimap }; template -ircd::util::instance_multimap::instance_multimap(K&& key) + class T, + class C> +ircd::util::instance_multimap::instance_multimap(K&& key) :it { map.emplace(std::forward(key), static_cast(this)) @@ -45,9 +47,10 @@ ircd::util::instance_multimap::instance_multimap(K&& key) {} template -ircd::util::instance_multimap::instance_multimap(const typename decltype(map)::const_iterator &hint, - K&& key) + class T, + class C> +ircd::util::instance_multimap::instance_multimap(const typename decltype(map)::const_iterator &hint, + K&& key) :it { map.emplace_hint(hint, std::forward(key), static_cast(this)) @@ -55,8 +58,9 @@ ircd::util::instance_multimap::instance_multimap(const typename decltype(m {} template -ircd::util::instance_multimap::instance_multimap(instance_multimap &&other) + class T, + class C> +ircd::util::instance_multimap::instance_multimap(instance_multimap &&other) noexcept :it { @@ -71,8 +75,9 @@ noexcept } template -ircd::util::instance_multimap::instance_multimap(const instance_multimap &other) + class T, + class C> +ircd::util::instance_multimap::instance_multimap(const instance_multimap &other) :it { other.it != end(map)? @@ -82,9 +87,10 @@ ircd::util::instance_multimap::instance_multimap(const instance_multimap & {} template -ircd::util::instance_multimap & -ircd::util::instance_multimap::operator=(instance_multimap &&other) + class T, + class C> +ircd::util::instance_multimap & +ircd::util::instance_multimap::operator=(instance_multimap &&other) noexcept { this->~instance_multimap(); @@ -97,9 +103,10 @@ noexcept } template -ircd::util::instance_multimap & -ircd::util::instance_multimap::operator=(const instance_multimap &other) + class T, + class C> +ircd::util::instance_multimap & +ircd::util::instance_multimap::operator=(const instance_multimap &other) { this->~instance_multimap(); it = other.it != end(map)? @@ -110,8 +117,9 @@ ircd::util::instance_multimap::operator=(const instance_multimap &other) } template -ircd::util::instance_multimap::~instance_multimap() + class T, + class C> +ircd::util::instance_multimap::~instance_multimap() noexcept { if(it != end(map))