Ниже приведена попытка реализовать общий указатель с модифицированной семантикой operator==
:
template <typename T>
struct deref_shared_ptr: private std::shared_ptr<T> {
using Base = std::shared_ptr<T>;
// ... using statements to include functionality from the base.
bool operator==(const deref_shared_ptr rhs) const {
return (**this == *rhs);
}
};
Я борюсь с реализацией эквивалента std::make_shared
для этого типа. Это моя попытка:
template< class T, class... Args >
deref_shared_ptr<T> make_deref_shared( Args&&... args ) {
return reinterpret_cast<deref_shared_ptr<T>>(std::make_shared<T>(args...));
}
Это не работает: компилятор (g++ 5.4.0
) жалуется на недопустимый листинг. Почему это не работает и что мне делать вместо этого приведения?