-// utility functions
-
-/** Specialization of is_exactly_a<realsymbol>(obj) for realsymbol objects. */
-template<> inline bool is_exactly_a<realsymbol>(const basic & obj)
-{
- if (!is_a<symbol>(obj))
- 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 (!is_a<symbol>(obj))
- return false;
- unsigned domain = static_cast<const symbol &>(obj).get_domain();
- return domain == domain::positive;
-}
+ possymbol* duplicate() const { return new possymbol(*this); }
+};
+GINAC_DECLARE_UNARCHIVER(possymbol);