Generic Lambda

What does auto in a lambda parameter list actually become under the hood?

auto add = [](auto a, auto b) { return a + b; };
A

The lambda is converted to a std::function<auto(auto, auto)> that handles any type

B

The lambda deduces the types at runtime using RTTI

C

Each auto parameter makes the lambda's operator() a template, so the compiler generates a new instantiation for each combination of argument types

D

Both parameters are deduced as the same type: auto enforces homogeneous arguments