Don't do that it is so easy to have incorrect usage.
All your cases can be done using normal syntax in C++.
// int arr[128];
// ZeroArray(arr);
int arr[128] = {0}; // Zero whole array.
// Or better yet use a vector.
std:vector<int> arr(128); // zero init the vector of 128 elements.
// Or alternatively an array
std::array<int,128> arr(0);
// S s;
// ZeroStruct(s);
S s = S(); // Calls the default constructor for zero initialization.
See:
C++ implicit copy constructor for a class that contains other objectsC++ implicit copy constructor for a class that contains other objects
Proper way to initialize C++ structsProper way to initialize C++ structs
Does a c++ struct have a default constructor?Does a c++ struct have a default constructor?