Попробуйте целочисленное значение в параметре шаблона:
template <int N>
pair<bitset<N>, bitset<N>>
split_block_in_half(
bitset<2*N> block
)
......
Недостатком является то, что, поскольку 2*N
не может быть выведено из вызовов функций, вам необходимо явно указать N:
split_block_in_half<28>(block); // where block is bitset<56>
Если вы определите это так, вы можете использовать SFINAE, чтобы ограничить, чтобы N было четным.
template <int N>
std::enable_if_t<
N % 2 == 0,
pair<bitset<N/2>, bitset<N/2>>
>
split_block_in_half(bitset<N>);
Если у вас нет C ++ 14, измените std::enable_if_t<>
на typename std::enable_if<>::type
(C ++ 11).