Lets say I have a function(data_slice input), and i pass in a input of type byte_array, data_chunk or any iterable container. How does the compiler know the data_slice can actually wrap these other iterable types without explicitly instantiating them as data_slice(var) in the function for example? It's a neat wrapper design, but I don't understand how its compiled. Thanks in advance!