내가 아래 프로그램을 시도했다 실패 C++ 11
#include<type_traits>
using namespace std;
template <class F, class R = typename result_of<F()>::type>
R call(F& f) { return f(); }
int answer() { return 42; }
int main()
{
call(answer);
return 0;
}
는 "호출 (답변)"실패
이 컴파일을VC 말한다 'R 호출 (F &)' 'R'에 대한 템플릿 인수를 추론 할 수없는
GCC는 말한다 | 주 : 템플릿 인수 공제/대체 실패 : | 오류 : 함수가 나는 "쿵푸가 있는지 확실하지 않습니다 함수
를 반환 nction name "을 템플릿에 사용할 수 있습니다. 어디서 잘못 되었습니까? 내 전화 (답변)를 작동시키는 방법은 무엇입니까?
그러나 lvalue로 f를 호출 할 수없는 이유는 무엇입니까? 함수 이름은 항상"lvalue "가 아니므로 – Troskyvs
당신의 예제에서, 템플릿 타입 공제가 작동하기 때문에,'F'는 참조가 아닌 함수 타입입니다. 전달 참조를 사용하면'F'는'answer'에 대한 참조로 추론됩니다. static_assert (예 : is_reference :: value, "!");'나의 예제와 @ TC의 것 ' –
skypjack
또 다른 테스트는'call 내에'std :: function func;를 추가하는 것이다. '두 예제 모두에서. 이것은'F'에 대한 유형 공제와 함께 여러분이 무슨 일이 일어나고 있는지 이해하는 데 도움이 될 것입니다. –
skypjack