I think that my initial answer (implicit conversion) is incorrect. The data_slice is a typedef of array_slice<uint8_t>. It's constructor is a template method, so the type passed defines the type of the parameter (as opposed to being converted to it in the case of implicit conversion).