MSVC で正常にコンパイルされるコードをいくつか入手しました (または、それを送ってくれた Windows 開発者はそう言っています) が、CLang ではエラーが発生します。周りを見回してみると、CLang はテンプレートの特殊化の解決に関して実際により厳密であることがわかりましたが、私の場合、特殊化をどこに置くべきかわかりません。基本的に、私のファイルの 1 つには次のような構造体があります。
template<>
struct iterator_traits< char * > // error is here
{
typedef random_access_iterator_tag iterator_category;
typedef char value_type;
typedef ptrdiff_t difference_type;
typedef difference_type distance_type;
typedef char * pointer;
typedef char & reference;
};
これはnamespace std
ブロック内です。エラーメッセージは次のとおりです。
Explicit specialization of 'std::iterator_traits<char *>' after instantiation
同じエラー メッセージの別の部分 (Xcode でエラー メッセージを「展開」して表示) には と表示されImplicit instantiation first required here
、それをクリックするとstl_iterator.h
、具体的には次の行 (642 行目) に移動します。
typedef typename iterator_traits<_Iterator>::iterator_category
iterator_category;
この場合、何をするのが正しいのか誰か知っていますか?クラスに関する例は見たことがありますが、構造体に関する例は見たことがありません。