So back to your question about event wait lists. With the above change I think it would make sense to add another method to the cl::Kernel object for setting an event wait list. At the end of the day it will look like this:
kernel.bind(queue, cl::NDRange(...), cl::NDRange(...));
Though if we were to go this route we could even separate out the NDRanges into their own method as well:
Though this is a part of the API I've never really had a solid feeling about how it should be designed. <snip> . Personally, I can never remember long argument lists and I think they're prone to bugs, so I prefer the many methods approach.