-/** Specialization of is_exactly_a<realsymbol>(obj) for realsymbol objects. */
-template<> inline bool is_exactly_a<realsymbol>(const basic & obj)
-{
- if (obj.tinfo() != &symbol::tinfo_static)
- return false;
- unsigned domain = static_cast<const symbol &>(obj).get_domain();
- return domain==domain::real || domain==domain::positive;
-}
-
-/** Specialization of is_exactly_a<possymbol>(obj) for possymbol objects. */
-template<> inline bool is_exactly_a<possymbol>(const basic & obj)
-{
- if (obj.tinfo() != &symbol::tinfo_static)
- return false;
- unsigned domain = static_cast<const symbol &>(obj).get_domain();
- return domain == domain::positive;
-}
-
-// wrapper functions around member functions
-inline void unassign(symbol & symarg)
-{ symarg.unassign(); }
+ possymbol* duplicate() const { return new possymbol(*this); }
+};
+GINAC_DECLARE_UNARCHIVER(possymbol);