def find_noncopyable_vars(class_type, already_visited_cls_vars=None):
assert isinstance(class_type, class_declaration.class_t)<EOL>logger = utils.loggers.cxx_parser<EOL>mvars = class_type.variables(<EOL>lambda v: not v.type_qualifiers.has_static,<EOL>recursive=False,<EOL>allow_empty=True)<EOL>noncopyable_vars = []<EOL>if already_visited_cls_vars is None:<EOL><INDENT>already_visited_cls_vars = []<EOL><DEDENT>message = (<EOL>"<STR_LIT>" +<EOL>"<STR_LIT>")<EOL>for mvar in mvars:<EOL><INDENT>var_type = type_traits.remove_reference(mvar.decl_type)<EOL>if type_traits.is_const(var_type):<EOL><INDENT>no_const = type_traits.remove_const(var_type)<EOL>if type_traits.is_fundamental(no_const) or is_enum(no_const):<EOL><INDENT>logger.debug(<EOL>(message + "<STR_LIT>"),<EOL>var_type.decl_string)<EOL>noncopyable_vars.append(mvar)<EOL><DEDENT>if is_class(no_const):<EOL><INDENT>logger.debug((message + "<STR_LIT>"), var_type.decl_string)<EOL>noncopyable_vars.append(mvar)<EOL><DEDENT>if type_traits.is_array(no_const):<EOL><INDENT>logger.debug((message + "<STR_LIT>"), var_type.decl_string)<EOL>noncopyable_vars.append(mvar)<EOL><DEDENT><DEDENT>if type_traits.is_pointer(var_type):<EOL><INDENT>continue<EOL><DEDENT>if class_traits.is_my_case(var_type):<EOL><INDENT>cls = class_traits.get_declaration(var_type)<EOL>if cls in already_visited_cls_vars:<EOL><INDENT>continue<EOL><DEDENT>already_visited_cls_vars.append(cls)<EOL>if is_noncopyable(cls, already_visited_cls_vars):<EOL><INDENT>logger.debug(<EOL>(message + "<STR_LIT>"),<EOL>var_type.decl_string)<EOL>noncopyable_vars.append(mvar)<EOL><DEDENT><DEDENT><DEDENT>logger.debug((<EOL>"<STR_LIT>" +<EOL>"<STR_LIT>"), class_type.decl_string)<EOL>return noncopyable_vars<EOL>
Returns list of all `noncopyable` variables.

If an already_visited_cls_vars list is provided as argument, the returned
list will not contain these variables. This list will be extended with
whatever variables pointing to classes have been found.

Args:
    class_type (declarations.class_t): the class to be searched.
    already_visited_cls_vars (list): optional list of vars that should not
        be checked a second time, to prevent infinite recursions.

Returns:
    list: list of all `noncopyable` variables.