c++ - deducting a type T for std::function from a lambda function -
i trying understand how following code works :
#include <iostream> #include <functional>  using namespace std;  template <typename t> struct identity {     typedef t type; };  template <typename t> void foo(t val, typename identity<function<void(t)>>::type f) {     f(val); }  int main () {     foo(1337,[](int x){ cout << "lambda " << x << endl; });      return 0; } there no choice of t make lambda type equal std::function(void(t))type, that's why metafunction needed.
i know nested-name-specifier :: brick wall make compiler not try deduce type t parameter.
so tried same code without t val function parameters , t not deduced.
does mean compiler following steps when call
foo(1337,[](int x){ cout << "lambda " << x << endl; });
- arg 1337 , param t val// t deducted int
- brick wall, won't try deduce type second argument
will compiler call identity<function<void(int)>> using type t deducted step 1 or else?
yes, believe you're right.
unfortunately, language template argument deduction in standard incredibly verbose, daren't begin trying prove fact.
Comments
Post a Comment