Сравните connection_hdl (weak_ptr) на равенство

Мне нужно сравнить два websocket++ connection_hdl:

// Create a weak pointer on the heap using that shared_ptr.
// Cast that weak pointer to void* and manage it using another shared_ptr
// connection_hdl hdl(reinterpret_cast<void*>(new connection_weak_ptr(con)));

Я пробовал этот код

template <typename T, typename U>
inline bool equals(const connection_hdl<T>& t, const connection_hdl<U>& u)
{
    return !t.owner_before(u) && !u.owner_before(t);
}

но компилятор жалуется, что connection_hdl is not a template.

Можно ли изменить приведенный выше код для сравнения connection_hdls? Connection_hdls можно использовать с контейнерами с помощью owner_less, поэтому по моему неопытности само собой разумеется, что право собственности можно использовать для сравнения.

Единственная другая связанная техника, которую я могу найти, - это сравнение наборов weak_ptrs

bool result = !(std::lexicographical_compare(set1.begin(), set1.end(),
                                     set2.begin(), set2.end(),
                                     set1.value_comp()) ||
            std::lexicographical_compare(set2.begin(), set2.end(),
                                     set1.begin(), set1.end(),
                                     set1.value_comp()));

который кажется близким к моим потребностям, но я не могу быть уверенным или переработать этот код в соответствии со своими намерениями из-за моей неопытности.

Как можно сравнить два connection_hdl на равенство?

это безопасно?

Я изменил первый код на этот

bool connections_equal(connection_hdl t, connection_hdl u)
{
    return !t.owner_before(u) && !u.owner_before(t);
}

и он компилируется. Безопасно ли это, если не считать предупреждения о пустоте weak_ptr? Моя неопытность не позволяет мне точно определить, в то время как мой ограниченный опыт говорит мне, что только потому, что он компилируется, не означает, что он будет работать так, как ожидалось.


person Community    schedule 11.05.2014    source источник