Я получаю сообщение об ошибке при попытке добавить std :: iterator_traits для шаблонной структуры-члена - т.е. у меня есть класс итератора, который является членом шаблонного внешнего класса:
namespace Toolbox {
template <typename CharType>
class substring_container_adapter
{
public:
struct iterator // : public std::iterator<std::forward_iterator_tag, const CharType *> C++ 17 is very upset at this approach!
{
// iterator constructor
iterator(const CharType * pszPosition, const CharType * pszDelimeters)
Позже япопробуйте добавить частичную специализацию для свойств итератора в std, потому что, очевидно, наследование от std :: iterator устарело (даже если это - или boost :: iterator_adaptor <> имеет смысл и фактически работает в этом и других контекстах) ...
// define iterator traits for our custom iterators
namespace std
{
template <typename CharType>
struct iterator_traits<class Toolbox::substring_container_adapter<CharType>::iterator>
{
using iterator_category = forward_iterator_tag;
using value_type = CharType;
};
}
Однако VC ++ 2017 версии 15.7.3 (C ++ 17 включен для этого проекта) жалуется:
ошибка C2764: «CharType»: параметр шаблона не используется или выводится при частичной специализации'std :: iterator_traits :: iterator>'
Почему бы и нет?
Я подозреваю, что это раздражающее ограничение! @ # $ из-за попытки частичной специализации структуры члена вместошаблонная структура вне substring_container_adapter <>?