Accept< A > Node1 Accept< A > - m_predicate + Accept() + Accept() + operator()() + pass() + name() + description() Node2 std::string Node2->Node1 -m_desc -m_name Node3 std::basic_string< char > Node3->Node2