2010-12-19 7 views
9

방금 ​​skiplist 컨테이너 라이브러리를 출시했습니다. 그리고 썬 컴파일러는 이것에 대해 불평 :템플릿 함수에 대한 템플릿 인수

"include/CSIndexedSkipList.h", line 65: Error: Too few arguments for template std::reverse_iterator<CS::BidiIdxIterator<CS::IndexedSkipList<CS::T, CS::R>>>. 
"include/CSIndexedSkipList.h", line 207:  Where: While specializing "CS::IndexedSkipList<CS::T, CS::R>". 
"include/CSIndexedSkipList.h", line 207:  Where: Specialized in non-template code. 

위의 코드는 207에서 시작 것입니다 그러나 그것은 reverse_iterator에 대해 불평 것 같다 :

template <class T, class R> 
bool operator==(const IndexedSkipList<T,R> &left, const IndexedSkipList<T,R> &right) 
{ 
    return ((left.size() == right.size()) && 
      (std::equal(left.begin(), left.end(), right.begin()))); 
} 

오류는 있습니다. 나는 그것을 실제로 이해할 수 없다. 필자는 Sun 컴파일러에 직접 액세스 할 수 없으므로 내가 잘못하고 있는지 궁금해하고있었습니다.

: 또한

, 그들은 단지 이것을 사용, 난 단지 reverse_iterator에서 하나 개의 템플릿 인수를 사용하고 있습니다,하지만 난 그래도 난 봤는데 어디에나 두 번째 인수 T.에 대한 기본이 없다는 것을 말하는 SGI 문서를 발견

typedef std::reverse_iterator<iterator> reverse_iterator; 

그건 컴파일러가 불평하는 65 행입니다. 매개 변수로 T를 추가해야합니까? 문제의 오류를 파악할 수 없습니다.

현재,이 발견은 모든 플랫폼에서 gcc에서 작동합니다. 또한 볼랜드에서도 잘 작동합니다.

답변

10

Comparing C++ Standard Libraries libCstd and libstlport에서 설명한대로 Sun C++ 컴파일러에는 libCstd와 libstlport의 두 가지 구현 인 "C++ 표준 라이브러리"가 함께 제공됩니다. 안타깝게도 libCstd는 표준을 따르지는 않지만 이전 버전과의 호환성을 위해 기본값입니다. 다른 차이점 중 libCstd의 std::reverse_iterator 템플릿 버전은 둘 이상의 템플릿 매개 변수를 사용합니다.

컴파일러 옵션 -library=stlport4을 전달하여 libstlport를 사용하도록 컴파일러에 지시해야합니다.

은 참조 :

0

, -library=stlport4STLPort의 버전이 썬과 함께 제공하기 때문에 Solaris에서 실행 성능이 중요한 멀티 스레드 애플리케이션을위한 옵션이 아닙니다 Studio 12.1/12.2는 할당/할당 해제시 spinlock mutex가 Solaris에서 너무 느리기 때문에 libCstd보다 훨씬 느립니다. STLPort5은이 점에서 더 잘해야하지만 Solaris에서 빌드하지 못했습니다. STLPort은 Solaris에서 더 이상 적극적으로 지원되거나 사용되지 않는 것으로 보입니다. 따라서 SPARC 및 x86 모두에서 우리 소프트웨어 전체에 대해 libCstd으로 완전히 전환해야했습니다.

관련 문제