Let me first say that I do appreciate the efforts made and I generally enjoy using OpenCL. Though, some issues arise when used outside of simple demos.

Correct me if I'm wrong but there seems to be no way for a OpenCL driver to tell whether a kernel argument is given correctly apart from it's size. So there is no way to tell apart a cl_mem object (_cl_mem pointer, 8 bytes on 64-bit) argument from an accidentally given float2 or similar sized argument resulting in a crash. As there is no easy way for a user to get kernel argument type information besides parsing the kernel himself using an implementation that quite possibly differs from the driver's implementation it leaves him with significant stability issues. An issue that could easily be avoided at the API design level in my opinion. So, please, either consider designing a more robust interface or give the user some good ways to verify sanity himself.