10#ifndef MCRL2_ATERMPP_DETAIL_ATERM_H
11#define MCRL2_ATERMPP_DETAIL_ATERM_H
22class unprotected_aterm_core;
32template<
typename ...Terms>
38template <
typename Term>
40 std::disjunction<mcrl2::utilities::is_applicable<Term, unprotected_aterm_core&>,
43template<
typename ...Terms>
This is the class to which an aterm points.
bool is_marked() const
Check if the term is already marked.
_aterm(const function_symbol &symbol)
Create a term from a function symbol.
function_symbol m_function_symbol
const function_symbol & function() const noexcept
void mark() const
Mark this term to be garbage collected.
void unmark() const
Remove the mark from a term.
detail::_function_symbol::ref m_function_symbol
The shared reference to the underlying function symbol.
An unprotected term does not change the reference count of the shared term when it is copied or moved...
Inherit from this class to prevent it from being copyable.
bool tagged() const noexcept
_aterm * address(const unprotected_aterm_core &t)
std::disjunction< std::is_convertible< Term, unprotected_aterm_core >, std::disjunction< mcrl2::utilities::is_applicable< Term, unprotected_aterm_core & >, mcrl2::utilities::is_constant_function_yielding< Term, unprotected_aterm_core > > > is_term_or_function
void debug_print(std::ostream &o, const _aterm *t, const std::size_t d=3)
The main namespace for the aterm++ library.
Checks whether condition holds for all types passed as variadic template.