Повысьте реализацию iterator_facade - PullRequest
0 голосов
/ 26 октября 2018

Я надеюсь, что кто-то, знакомый с реализацией 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> else writable_postfix_increment_proxy<Iterator>.

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

...