include <iostream>

if defined(__APPLE__) || defined(__MACOSX) include <OpenCL/cl.hpp> else include <CL/cl.hpp> endif

{{{outer_code}}}

int main(){

//get all platforms (drivers)
std::vector<cl::Platform> all_platforms;
cl::Platform::get(&all_platforms);
if(all_platforms.size()==0){
    std::cout<<" No platforms found. Check OpenCL installation!\n";
    exit(1);
}
cl::Platform default_platform=all_platforms[0];
std::cout << "Using platform: "<<default_platform.getInfo<CL_PLATFORM_NAME>()<<"\n";

//get default device of the default platform
std::vector<cl::Device> all_devices;
default_platform.getDevices(CL_DEVICE_TYPE_GPU, &all_devices);
if(all_devices.size()==0){
    std::cout<<" No devices found. Check OpenCL installation!\n";
    exit(1);
}
cl::Device default_device=all_devices[0];
std::cout<< "Using device: "<<default_device.getInfo<CL_DEVICE_NAME>()<<"\n";

cl::Context context({default_device});

//create queue to which we will push commands for the device.
cl::CommandQueue queue(context,default_device);

{{{post_init_code}}}

{{{inner_code}}}

return 0;

}