Битовые операторы не могут использоваться с параметрами универсального типа.
Даже это простое приведение не компилируется:
result = (T)b;
Но мы можем написать это, которое компилируется (полезно для другого случая):
result = (T)Convert.ChangeType(b, typeof(T));
Так что это некомпилировать:
result |= ( (T)Convert.ChangeType(b, typeof(T)) ) << pos;