std::string & append_kernel_arguments(std::set<std::string> & already_generated, std::string & str, unsigned int vector_size) const{
   if(already_generated.insert(name_).second){
     std::string vector_scalartype = append_vector_size(scalartype_, vector_size);
     str += detail::generate_pointer_kernel_argument("__global", vector_scalartype, name_);
     append_optional_arguments(str);
   }
   return str;
 }
 std::string & append_kernel_arguments(std::set<std::string> & already_generated, std::string & str) const
 {
   if(already_generated.insert(name_).second)
   {
     str += generate_pointer_kernel_argument("__global", utils::simd_scalartype(scalartype_, simd_width_), name_);
     append_optional_arguments(str);
   }
   return str;
 }