[완료] 템플릿 인자추론 실패
글쓴이: netionics / 작성시간: 월, 2007/10/22 - 11:51오후
#include <iostream> namespace my { template <class item> class out { public: class in { }; }; // 외부 템플릿 클래스 비교 template <class item> bool operator==(out<item>& left, out<item>& right) { return true; } // 내부 템플릿 클래스 비교 template <class item> bool operator==(typename out<item>::in& left, typename out<item>::in& right) { return true; } } int main() { my::out<int>::in i1; my::out<int>::in i2; my::out<int> o1; my::out<int> o2; if(o1 == o2) std::cout << "out success\n"; if(i1 == i2) // 여기서 op==를 찾지 못합니다. std::cout << "out::in success\n"; return 0; }
g++, .net모두 my::out::in에 대한 op==를 찾지 못합니다.
구체적인 에러메세지는 이렇습니다. no match for 'operator==' in i1 == i2
op==를 멤버로 만들면 찾아내긴 합니다.
템플릿이 아닌 일반 클래스일 때도 별다른 문제 없이 op==를 찾아냅니다.
인자 추론이 안되는 이유가 뭘까요?
Forums:
Vandevoorde와 Josuttis의
Vandevoorde와 Josuttis의 C++ Templates 170쪽에 보면 template argument deduction에서 제외되는 경우로 아래와 같은 내용이 나옵니다.
감사합니다.
template argument deduction으로 구글링 해보니
그 외에 한 두가지 더 인자추론을 거부하는 경우에 대해서 언급된 부분을 찾을 수 있었습니다.
감사합니다.
:)
댓글 달기