2010-12-19 31 views
9

skiplistコンテナライブラリをリリースしました。そして、Sunのコンパイラは、この文句:テンプレート関数のテンプレート引数

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()))); 
} 

エラーは以下のとおりです。

"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文句だと思われます。私は本当にそれを理解できません。私はSunのコンパイラに直接アクセスすることはできないので、私は何か間違っているのだろうかと思っていました。

また、私はreverse_iterator内の1つのテンプレート引数を使用していますが、私は私も見てきたどこでも二番目の引数T.にはデフォルトがないことを言ってSGIのマニュアルを参照して気づいた、彼らはこれを使用します

typedef std::reverse_iterator<iterator> reverse_iterator; 

これは、コンパイラが不平を言う行65です。パラメータとしてTを追加する必要がありますか?私は問題のエラーを理解することはできません。

これは、私が見つけることができるすべてのプラットフォーム上でgccで動作します。また、Borlandでも同様に動作します。

答えて

10

Comparing C++ Standard Libraries libCstd and libstlportで説明したように、Sun C++コンパイラには、「C++標準ライブラリ」の2つの実装、libCstdとlibstlportが付属しています。残念ながら、libCstdは標準準拠ではありませんが、下位互換性の理由からデフォルトです。 libCstdのバージョンstd::reverse_iteratorテンプレートの他の違いの中で、複数のテンプレートパラメータが使用されています。

コンパイラオプション-library=stlport4を渡してlibstlportを使用するようにコンパイラに指示する必要があります。

も参照してください:

0

ところで、STLPortのバージョンは、Sunに同梱されているため-library=stlport4は、Solaris上で実行されているパフォーマンス重視のマルチスレッド・アプリケーションのためのオプションではありませんスタジオ12.1/12.2は、割り当て/割り当て解除時のスピンロックミューテックスがSolarisで遅すぎるため、libCstdよりもはるかに遅いです。 STLPort5はこの点でより良いはずですが、私はSolaris上でビルドできませんでした。 STLPortはもはやSolaris上ではもはや積極的にサポートされていないようです。だから、SPARCとx86の両方のソフトウェアでは、すべてlibCstdに完全に切り替える必要がありました。

関連する問題