Повысьте реализацию iterator_facade

Я надеюсь, что кто-то, знакомый с реализацией boost iterator_facade, сможет пролить свет на то, почему следующая мета-функция используется при выборе writable_postfix_increment_proxy или же postfix_increment_proxy,

template <class Reference, class Value>
struct is_non_proxy_reference
  : is_convertible<
        typename remove_reference<Reference>::type
        const volatile*
      , Value const volatile*
    >
{};

Это можно найти здесь и использовать в метафункции postfix_increment_result, которая выбирает, должен ли оператор postfix возвращать либо прокси, либо просто итератор. Остаток от postfix_increment_result кажется довольно ясно. Что-то вроде..

если iter::reference доступен для чтения и категория в основном эквивалентна input_iterator_tag или output_iterator_tag, тогда возвращается прокси.

Однако я смущен is_non_proxy_reference, который, кажется, true в том случае, если Reference такой же как Value игнорирование квалификаторов cv. В таком случае postfix_increment_proxy<Iterator> еще writable_postfix_increment_proxy<Iterator> в б.

Когда Reference будет другой "базовый тип" Value? Это для поддержки возврата вашего собственного типа прокси, если вы хотели? Или что-то другое?

0 ответов

Другие вопросы по тегам