#ifndef QUERY_FOREIGN_HPP #define QUERY_FOREIGN_HPP #include namespace matador::sql { template < class Type > class foreign { public: using value_type = Type; using pointer = value_type*; using reference = value_type&; foreign() = default; explicit foreign(Type *obj) : obj_(obj) {} foreign(const foreign&) = default; foreign& operator=(const foreign&) = default; foreign(foreign&&) noexcept = default; foreign& operator=(foreign&&) noexcept = default; ~foreign() = default; pointer operator->() { return obj_.get(); } const value_type* operator->() const { return obj_.get(); } reference operator*() { return *obj_; } const value_type& operator*() const { return *obj_; } private: std::shared_ptr obj_; }; template [[maybe_unused]] foreign make_foreign(Args&&... args) { return foreign(new Type(std::forward(args)...)); } } #endif //QUERY_FOREIGN_HPP