Q:

Argument type auto deduction and anonymous lambda functions

Lets say I have these lines of code;
std::vector<int> ints;
std::for_each(ints.begin(), ints.end(), [](int& val){ val = 7; });

However, I dont want to specify the argument type in my lambda functions, ie, I want to write something like this;
std::for_each(ints.begin(), ints.end(), [](auto& val){ val = 7; });

Is there anyway this can be achieved?
(boost::lambda doesn't need types to be specified...)

Update:
For now I use a macro: #define _A(container) decltype(*std::begin(container)) so I can do:
std::for_each(ints.begin(), ints.end(), [](_A(ints)& val){ val = 7; });

A:

No. "Polymorphic lambdas" is what this feature was referred to during the C++ committee discussions, and it was not standardized. The parameter types of a lambda must be specified.
You can use decltype though:
std::for_each(ints.begin(), ints.end(), [](decltype(*ints.begin())& val){ val = 7; });

A:

Your preferred syntax is legal as of C++14, and is referred to as a generic lambda or polymorphic lambda.
http://isocpp.org/blog/2013/04/n3649-generic-polymorphic-lambda-expressions-r3
auto lambda = [](auto x) { return x; };
lambda(5);
lambda("hello");
lambda(std::vector<int>({5, 4, 3}));

As of C++20, we can also use this syntax for regular functions:
auto f(auto x) { return x; }

A:

If you have a container you may try something like this
template<typename Container>
void reset(Container c)
{
   for_each(c.begin(),c.end(),[](typename Container::reference val) { val=7; });
}

