Хорошо, я приму это как юридический ответ :) Думаю, я просто забуду о специализации этой черты итератора, поскольку она уже определена. РЕДАКТИРОВАТЬ: О, нет, обычно, но я нахожу странным, что этот код не работает с моим компилятором (4.5.5). В комментариях к вопросу кто-то попросил полный воспроизводимый код, который я вставил на codepad.org, и заметил, что он компилируется там.

я есть следующий код:

template<typename T, typename Allocator = std::allocator<T> >
class Carray {
    // ...
    typedef T* pointer;
    typedef pointer iterator;
    // ...
};

Сейчас я пытаюсь сделать частичную специализацию дляiterator_traits, Вроде все нормально, но g ++ 4.4.5 жалуется:

#include <iterator>

namespace std {
    template<typename T, typename Allocator>
    struct iterator_traits<typename Carray<T, Allocator>::iterator> { // line 128
        typedef T value_type;
        typedef typename Allocator::difference_type difference_type;
        typedef typename Allocator::reference reference;
        typedef typename Allocator::pointer pointer;
        typedef typename std::random_access_iterator_tag iterator_category;
    };
}

Это полное сообщение об ошибке:

carray.h:128: error: template parameters not used in partial specialization:
carray.h:128: error:         ‘T’
carray.h:130: error: ‘Allocator’ has not been declared
carray.h:131: error: ‘Allocator’ has not been declared
carray.h:132: error: ‘Allocator’ has not been declared

Ответы на вопрос(1)

Ваш ответ на вопрос