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)
