Are all lambdas inside templated lambdas also templated lambdas?

Viewed 155

Consider this code (which compiles on GCC and MSVC):

int main()
{
    auto foo = [](auto p){
        typedef decltype(p) p_t;
        auto bar = [](){
            return static_cast<p_t>(10);
        };
        return bar();
    };

    std::cout << foo(0ull) << std::endl;
}

foo() is a templated lambda because it has an auto parameter. But for bar() to know the type p_t, it must somehow be implicitly templated too, which then leads me to the question in the title:

Are all lambdas inside templated lambdas also templated lambdas?

If that's the case, then it seems like the number of templates parameters will grow pretty quickly if I have lots of nested lambdas (not necessarily a bad thing, but it comes as a surprise to me).

1 Answers
Related