template <class T , unsigned int pos , unsigned int len = 1>
struct bit_mask{
static constexpr T mask = ~( ~static_cast<T>(0) << (len) ) << pos;
// その他の処理
}

特定のビットをマスクする処理がしたくて↑のようなテンプレートクラスを作成したのだけど
warning: left operand of shift expression '(-1 << 1)' is negative [-fpermissive]
の警告が出てしまう

この警告が符号あり整数型を左シフトしてはいけないというのは分かるので、Tが必ず符号なし整数型であることを明示したいのだけどどうしたらいいだろう?
特殊化すると符号なしのバイト幅毎に処理を描かないといけなくなるし、もっと簡便なほうほうがあったりするのでしょうか?