c++ std namespace에 있는 템플릿을 부분 특수화하지 못하는 이유가 뭘까요?
글쓴이: netionics / 작성시간: 일, 2007/09/16 - 12:20오전
effective c++ 항목 25에 보면 원래 namespace라는 것은 항상 열려있기 때문에 수시로 항목을 추가할 수 있지만 std namespace는 특별해서 일개 프로그래머는 그 거룩한 영역에 어떤 요소도 추가할 수 없다. 하지만 std namespace안에 있는 템플릿의 완전 특수화는 허락된다. 뭐 이렇게 나와있습니다.
namespace std {
template <class T>
void swap(T& left, T& right);
}
class widget {};
namespace std { // 이건 허락되지만
template <>
void swap(widget& left, widget& right) {...}
}
template <class T>
class widget {};
namespace std { // 나는 이 부분 특수화 허락 못하네 어흠
template <class T>
void swap(widget<T>& left, widget<T>& right) {...}
}
c++규칙에 예외가 있는게 한두가지가 아니지만 이번 항목은 특히 납득이 안가는군요.
표준 위원회 분들이 쪼잔해서 그걸 막아놓은 것은 아닐테고 뭔가 합당한 이유가 있을텐데 TC++PL도 뒤져보고 구글에서도 찾아봤지만 못찾겠습니다.
왜 이럴까요?
Forums:
댓글 달기