Hmm. So lets say I declare "data_chunk myChunk", fill it with several bytes of entropy and use it as argument in "bitcoin_short_hash(data_slice data);"
When that hash function is called, and the input is a data_chunk instead of data_slice, the implicit conversion happens, using the single argument constructor with template <typename Container>
The template for array_slice will take "data_chunk" as "Container type".
And so the array_slice constructor will be: array_slice(const data_chunk& container) for this implicit conversion.
(edited)