Я надеюсь, что кто-то, знакомый с реализацией 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
?Это для поддержки возврата вашего собственного типа прокси, если вы хотели?Или что-то еще?