using decltype in order to hide the actual implementation of the container waveform_ to clients