dirty とか使わず単に

set

T e;
while (!_v[q]. _a.compare_exchange_weak(e, e|(1<<r)) {}

reset

T e;
while (!_v[q]. _a.compare_exchange_weak(e, e& ~(1<<r)) {}

じゃないのよく分からんけど