SYNOPSIS
        unknown call_strict(object|string ob, string func, ...)
        unknown call_strict(object*|string* ob, string func, ...)

        ob.fun(...)
        ob->"fun"(...)
        ob->(fun)(...)

DESCRIPTION
        Similar to call_other(). Call a member function <fun> in another
        object <ob> if the function is defined and publicly accessible.
        Any of the optional extra arguments are passed to the function.
        Result is the value returned from the called function.

        ob.fun(args) and ob."fun"(args) are equivalent to
        call_strict(ob, "fun", args).
        "ob_name".fun(args) and "ob_name"."fun"(args) are equivalent to
        call_strict("ob_name", "fun", args);
        ob.(fun)(args) is equivalent to call_strict(ob, fun, args),
        "ob_name".(fun)(args) is equivalent to
        call_strict("ob_name", fun, args).

        If ob::fun does not define a publicly accessible function, the
        efun will call the H_DEFAULT_METHOD hook if set. If the hook
        is not set or can't resolve the call either, the efun will raise
        a runtime error.

        Calls to the master object never use the H_DEFAULT_METHOD hook.
        To force non-default calls, the efun call_direct_strict() can
        be used.

        ob can also be an object_name. If a string is passed for ob
        and an object with that name can't be found or loaded, an
        error occurs.

        Additionally the efun accepts an array of objects as <ob>: the
        function is called with the same arguments in all the given objects.
        The single results are collected in an array and yield the final
        result. Array elements can be objects or the names of existing
        objects. If a call to any of the objects failes, the efun will
        raise a runtime error.

HISTORY
        Introduced in LDMud 3.6.2.

SEE ALSO
        call_other(E), call_resolved(E), call_direct(E),
        call_direct_strict(E), call_direct_resolved(E),
        create(A), pragma(LPC), extern_call(E), function_exists(E),
        functions(LPC), map_objects(E)
