GCC가 내 기능 템플릿에 올바른 유형을 추론 할 수없는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com//questions/23032032

문제

#include <iostream>
#include <functional>
template<typename T>
struct id { typedef T type; };

template<typename T>
void f(T b, typename id<T>::type* a){}

int main() {
   f(0, 0);
}
.

VS2013 : OK!

g++4.8.2:compile error,such is the info:

main.cpp: In function 'int main()':
main.cpp:10:10: error: no matching function for call to 'f(int, int)'
     f(0,0);
          ^
main.cpp:10:10: note: candidate is:
main.cpp:7:6: note: template<class T> void f(T, typename id<T>::type*)
 void f(T b, typename id<T>::type* a){}
      ^
main.cpp:7:6: note:   template argument deduction/substitution failed:
main.cpp:10:10: note:   mismatched types 'typename id<T>::type*' and 'int'
     f(0,0);
          ^
.

도움이 되었습니까?

해결책

이유는 복합 유형 (예를 들어, 포인터 별)의 일부가있는 비 추전 상황에서 어떤 일이 일어나는 지 표준이 불분명 해졌지만 인수가 불일치되었지만 여전히 암시 적 변환에 의한 논쟁을 받아 들일 수 있습니다

Issue http : //www.open-std .org / JTC1 / SC22 / WG21 / docs / cwg_defects.html # 1184 함수 매개 변수가 추론이없는 템플릿 매개 변수가없는 상황과 비슷한 상황과 유사한 상황과 비슷한 변환이 있어야합니다. 불일치를 위해 aswell을 허용하십시오.

이후로 템플릿 매개 변수에 대한 인수 공제 중에 이러한 "암시 적 변환"의 치료와 관련하여 다른 문제가 발견되었으며 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1391 .

전반적으로, 1184의 효과는 GCC가 코드를 수락해야한다고 생각하지만 # 1391에 반영된 다른 경우의 문제로 인해 정확한 세부 정보가 작동 할 때까지 # 1184의 구현을 지연시킬 수 있습니다. < / P>

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top