template<class input_type, class func_type>
auto rfor_each(input_type&& input, func_type&& func, int) ->decltype(func(input))
{ return func(input);}
template<class input_type, class func_type>
void rfor_each(input_type&& input, func_type&& func, ...)
{ for(auto&& i : input) rfor_each(i, func, 0);}
#include <iostream>
int main()
{
std::cout << std::endl;
double B[3][3] = { { 1.2 } };
rfor_each(B[1], [](double&v){v = 5;}); //iterate over doubles
auto write = [](double (&i)[3]) //iterate over rows
{
std::cout << "{";
for(double d : i)
std::cout << d << ", ";
std::cout << "}\n";
};
rfor_each(B, write );
};
dGVtcGxhdGU8Y2xhc3MgaW5wdXRfdHlwZSwgY2xhc3MgZnVuY190eXBlPgphdXRvIHJmb3JfZWFjaChpbnB1dF90eXBlJiYgaW5wdXQsIGZ1bmNfdHlwZSYmIGZ1bmMsIGludCkgLT5kZWNsdHlwZShmdW5jKGlucHV0KSkgCnsgcmV0dXJuIGZ1bmMoaW5wdXQpO30KCnRlbXBsYXRlPGNsYXNzIGlucHV0X3R5cGUsIGNsYXNzIGZ1bmNfdHlwZT4Kdm9pZCByZm9yX2VhY2goaW5wdXRfdHlwZSYmIGlucHV0LCBmdW5jX3R5cGUmJiBmdW5jLCAuLi4pIAp7IGZvcihhdXRvJiYgaSA6IGlucHV0KSByZm9yX2VhY2goaSwgZnVuYywgMCk7fQoKI2luY2x1ZGUgPGlvc3RyZWFtPgppbnQgbWFpbigpCiB7CgogICAgIHN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7CiAgICAgZG91YmxlIEJbM11bM10gPSB7IHsgMS4yIH0gfTsKICAgICByZm9yX2VhY2goQlsxXSwgW10oZG91YmxlJnYpe3YgPSA1O30pOyAvL2l0ZXJhdGUgb3ZlciBkb3VibGVzCiAgICAgYXV0byB3cml0ZSA9IFtdKGRvdWJsZSAoJmkpWzNdKSAvL2l0ZXJhdGUgb3ZlciByb3dzCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0ZDo6Y291dCA8PCAieyI7CiAgICAgICAgICAgICBmb3IoZG91YmxlIGQgOiBpKSAKICAgICAgICAgICAgICAgICBzdGQ6OmNvdXQgPDwgZCA8PCAiLCAiOwogICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICJ9XG4iOwogICAgICAgICB9OwogICAgIHJmb3JfZWFjaChCLCB3cml0ZSApOwogfTs=
{1.2, 0, 0, }
{5, 5, 5, }
{0, 0, 0, }