2011-01-23 7 views
0

템플릿 매개 변수가 하나 뿐인 경우 C++ 템플릿이 자동으로 유형을 차감 할 수 있습니다. 예 :템플릿 이름이 두 개 이상인 템플릿 함수

template<typename T> 

void f(const T &t) 
{ 
    cout << t << endl; 
} 

f(1); 

입니다.

그러나

,

template<typename T1, typename T2> 

void f(const T1 &t1, const T2 &t2) 
{ 
    cout << t1 << t2 << endl; 
} 

f(1, 2); 

위의 코드는 컴파일을 전달할 수 없습니다. 이것은 컴파일러의 능력 때문이거나 표준에 위배되는 것입니까?

+6

컴파일러는 둘 이상의 템플릿 매개 변수를 추론 할 수 있어야합니다. 문제를 설명하기 위해 전체 컴파일 가능한 코드를 게시 할 수 있습니까? –

+3

내가 말할 수있는 한이 코드에는 아무런 문제가 없습니다. http://www.ideone.com/AEVs4 –

+0

매개 변수 목록에서'&'를 제거하면 어떻게됩니까? 나는 C++로 다소 녹슬었지만, 참조가 예상되는 곳에 정수 상수 ('1','2')를 전달할 수 있다는 것에 다소 놀랐다. – stakx

답변

3

두 번째 함수와 호출은 완벽하게 유효합니다. 귀하의 컴파일러는 오래된 거부 그것을 도청 또는 평면입니다.

+0

오래 전 논평에 언급 된대로. –

+1

@Tomalak : 괜찮은 답변으로 쓰여진 적은 ... – rubenvb

+1

@rubenvb : 질문에 결함이 있으므로이 질문에 대한 답변이 없습니다. –