6 #include <AH/STL/type_traits> // enable_if 
   12 template <
size_t Bits_out, 
size_t Bits_in, 
class T_out, 
class T_in>
 
   13 std::enable_if_t<(Bits_out <= 2 * Bits_in), T_out>
 
   16 template <
size_t Bits_out, 
size_t Bits_in, 
class T_out, 
class T_in>
 
   17 std::enable_if_t<(Bits_out > 2 * Bits_in), T_out>
 
   19     constexpr 
size_t leftShift = Bits_out - Bits_in;
 
   20     return (T_out(in) << leftShift) |
 
   21            increaseBitDepthImpl<leftShift, Bits_in, T_out>(in);
 
   24 template <
size_t Bits_out, 
size_t Bits_in, 
class T_out, 
class T_in>
 
   25 std::enable_if_t<(Bits_out <= 2 * Bits_in), T_out>
 
   27     constexpr 
size_t leftShift = Bits_out - Bits_in;
 
   28     constexpr 
size_t rightShift = Bits_in - leftShift;
 
   29     return (T_out(in) << leftShift) | (in >> rightShift);
 
   67 template <
size_t Bits_out, 
size_t Bits_in, 
class T_out, 
class T_in>
 
   69     static_assert(Bits_in <= 
sizeof(T_in) * CHAR_BIT,
 
   70                   "Error: Bits_in > bits(T_in)");
 
   71     static_assert(Bits_out <= 
sizeof(T_out) * CHAR_BIT,
 
   72                   "Error: Bits_out > bits(T_out)");
 
   73     return increaseBitDepthImpl<Bits_out, Bits_in, T_out>(in);