mIRC doesn't allow creating & as binvar name in some places, but once it's created, it won't always permit using it as a parameter. This means you can't use $bvar(%var) or $bvar(%var,0) to guarantee that %var contains name of a binvar that works with a particular command. It seems /bwrite and $regsubex are the exceptions to identifiers accepting it and commands rejecting it.

This is different than the issue where you can create a variable named % but not echo it, because every command and identifier using a binvar is either a command specifically for usage by &binvar only, or is an identifier where it's either not ambiguous whether & means binary not text, or it uses a switch to indicate that & means binary. i.e. 5th parm of $regsubex always begins with % or $

//set % test | echo 3 -a % [ % ] | echo 4 -a $var(%,0) $var(%,1) $var(%,1).value

The regsubex issue might be related to being an exception where square braces are normally allowed to touch commas and parenthesis, but the 5th parm won't accept without the spaces

bug: //tokenize 32 &v | echo -a $regsubex(foo,abc,,,[ $1 ]) $bvar(&v,1-).text
ok:: //tokenize 32 &v | echo -a $regsubex(foo,abc,,, [ $1 ] ) $bvar(&v,1-).text

Using binvar named & :

works: $hget yes $bvar yes

//hadd -m table item abc | echo -a $hget(table, item, &) - $bvar(&, 1-)

(repeating the $hget again, showing that once the binvar named & is created, that other commands don't always accept it)

bcopy as source no
//hadd -m table item abc | echo -a $hget(table, item, &) - $bvar(&, 1-) | bcopy &test 1 & 1 -1 | echo -a $bvar(&test,1-)
bcopy as destination no
//bset &v 1 abc | bcopy & 1 &v 1 -1

bread no
//bread $qt($mircexe) 0 2 & | echo -a $bvar(&,1-)

breplace no
//hadd -m table item abc | echo -a $hget(table, item, &) - $bvar(&,1-) | breplace & 97 98 | echo -a $bvar(&,1-)

bset no
//bset -t & 1 abc | echo -a $bvar(&,1-)

bunset no
//hadd -m table item abc | echo -a $hget(table, item, &) - $bvar(&,1-) | bunset & | echo 4 -a $bvar(&,1-)

bwrite yes
//hadd -m table item abc | echo -a $hget(table, item, &) - $bvar(&,1-) | bwrite -c test.dat 0 9 & | echo 4 -a $file(test.dat).size

$encode $decode yes
//hadd -m table item abc | echo -a $hget(table, item, &) - $bvar(&) | echo 4 -a $encode(&,bm) $decode(&,bm)

$regsubex no
//echo -a $regsubex(foo,abc,,,&) | echo -a $bvar(&,1-)

$bfind yes
//hadd -m table item abc | echo -a $hget(table, item, &) - $bvar(&,1-) | echo 4 -a $bfind(&,1,98)

crc & crypto hashes yes
//hadd -m table item abc | echo -a $hget(table, item, &) - $bvar(&) | echo 4 -a $crc(&,1) $md5(&,1) $sha1(&,1) $sha256(&,1) $sha384(&,1) $sha512(&,1) $hmac(&,key,sha1,1)

$cb yes
//clipboard test | echo 4 -a $cb(1,,&) $bvar(&,1-).text

$com yes
alias sendkeys_b { var %a = $ticks | hadd -m table item abc | noop $hget(table, item, &) | .comopen %a WScript.Shell | if (!$comerr) .comclose %a $com(%a,SendKeys,3,&bstr,&) }

$compress $decompress yes
//hadd -m table item $str(abc,100) | echo -a $hget(table, item, &) - $bvar(&) | echo 4 -a $compress(&,b) $bvar(&,0) $decompress(&,b) $bvar(&,0)