Is the following function thread-safe? And if it's not thread-safe, then is there really any overhead in making that funImpl non-static? Or does the compiler actually inline that function-object function and skip creating the function object altogether?
int myfun(std::array<int, 10> values)
{
static const auto funImpl = [&]() -> int
{
int sum = 0;
for (int i = 0; i < 10; ++i)
{
sum += values[i];
}
return sum;
};
return funImpl();
}
EDIT: I edited the function signature from:
int myfun(const std::array<int, 10>& values)
to:
int myfun(std::array<int, 10> values)
so that it is clear that I'm not asking about the tread-safety of values, but the thread-safety of the function local static variable funImpl.