docs: def __is_noncopyable_single(class_, already_visited_cls_vars=None):
      """
      Implementation detail.
  
      Checks if the class is non copyable, without considering the base classes.
  
      Args:
          class_ (declarations.class_t): the class to be checked
          already_visited_cls_vars (list): optional list of vars that should not
              be checked a second time, to prevent infinite recursions.
  
      Returns:
          bool: if the class is non copyable
      """
      # It is not enough to check base classes, we should also to check
      # member variables.
      logger = utils.loggers.cxx_parser
  
      if has_copy_constructor(class_) \
         and has_public_constructor(class_) \
         and has_public_assign(class_) \
         and has_public_destructor(class_):
          msg = os.linesep.join([
              "__is_noncopyable_single - %s - COPYABLE:" % class_.decl_string,
              "    trivial copy constructor: yes",
              "    public constructor: yes",
              "    public assign: yes",
              "    public destructor: yes"])
          logger.debug(msg)
          return False
  
      if already_visited_cls_vars is None:
          already_visited_cls_vars = []
  
      if find_noncopyable_vars(class_, already_visited_cls_vars):
          logger.debug(
              ("__is_noncopyable_single(TRUE) - %s - contains noncopyable " +
               "members"), class_.decl_string)
          return True
  
      logger.debug((
          "__is_noncopyable_single(FALSE) - %s - COPYABLE, because is " +
          "doesn't contains noncopyable members"), class_.decl_string)
      return False