value_type& operator->() { return value_type(inner->key, inner->value); }
Ваш тип возвращаемого значения является ссылкой на value_type
, но вы возвращаете локально созданный экземпляр, который будет уничтожен в конце области действия функции / оператора (т. Е. Закрывающего }
.) ссылка на мусор, поэтому ваш компилятор ненавидит вас.
Если вместо этого вы вернете по значению , у вас будет правильный и функциональный код. (Независимо от того, хотите ли вы вернуть по значению, зависит от типа value_type
.)
value_type operator->() { return value_type(inner->key, inner->value); }
Еще лучше было бы сохранить одно value_type
в качестве поля члена вашего класса, но вы говорите, что не хотите, так что это единственный другой реалистичный вариант.