[Solved] Declaring lambda with int type not working [closed]


Can I make it work in my case somehow?

Yes you can. You can either call it immediately after the definition:

int median = [](std::vector<int> a) {
    std::sort(a.begin(), a.end());
    return a[a.size() / 2];   
}(v); 
//^^  --> invoke immediately with argument


See for reference: How to immediately invoke a C++ lambda?

or define the lambda and call it later.

/* const */ auto median = [](std::vector<int> a) { ...}
int res = median(v);

Note that I have used auto type, to specify the type of the lambda function. This is because, lambda has so-called closure type, which we can only mention either by a auto or any type erasure mechanism such as std::function.

From cppreference.com

The lambda expression is a prvalue expression of unique unnamed non-union non-aggregate class type, known as closure type, which is declared (for the purposes of ADL) in the smallest block scope, class scope, or namespace scope that contains the lambda expression.

1

solved Declaring lambda with int type not working [closed]