Every expression with the & operator becomes a call to
this function, i.e. a&b is the same as
predef::`&(a,b).
Returns
If there's a single argument, that argument is returned.
If there are more than two arguments the result is:
`&(`&(arg1 , arg2 ), @extras ).
Otherwise, if arg1 is an object with an lfun::`&() , that
function is called with arg2 as argument, and its result is
returned.
Otherwise, if arg2 is an object with an lfun::``&() , that
function is called with arg1 as argument, and its result is
returned.
Otherwise the result depends on the argument types:
arg1 can have any of the following types:
int
Bitwise and of arg1 and arg2 .
string
The result is a string where each character is the bitwise
and of the characters in the same position in arg1 and
arg2 . The arguments must be strings of the same length.
array|mapping|multiset
The result is like arg1 but only with the
elements/indices that match any in arg2 (according to
`== and, in the case of mappings, hash_value ).
type(mixed)|program
Type intersection of arg1 and arg2 .
The function is not destructive on the arguments - the result is
always a new instance.