다음 코드가 (C++ 11 모드에서) 컴파일되지 않는 이유는 무엇입니까?템플릿 함수 매개 변수로 lambda 전달
prog.cc:9:5: error: no matching function for call to 'qux'
qux(ts, [](const T&) { return 42; });
^~~
prog.cc:4:6: note: candidate template ignored: could not match 'To (const From &)' against '(lambda at prog.cc:9:13)'
void qux(const std::vector<From>&, To (&)(const From&)) { }
^
그러나이 매개 변수와 일치 할 수없는 이유는 설명하지 않습니다
#include <vector>
template<typename From, typename To>
void qux(const std::vector<From>&, To (&)(const From&)) { }
struct T { };
void foo(const std::vector<T>& ts) {
qux(ts, [](const T&) { return 42; });
}
오류 메시지입니다. int
와 T
및 To
와 From
대체 내가 qux
비 템플릿 함수를 한 경우
, 그것은 컴파일합니다.
우선'qux'는 아무 것도 반환하지 않으므로'auto bar = qux ... '를 컴파일하면 안됩니다. – nbro
@nbro 이는 당면의 문제와 아무런 관련이 없습니다. – emlai
너무 많이 알고 있으면 질문하지 않을 것입니다. 어쨌든, 이유도 모르기 때문에 upvoted. – nbro