operator-> повторяется до тех пор, пока не вернет значение не-классового типа
В соответствии с13.3.1.2/8, или лучшеСноска-129 (выделение мое):
[...] Процесс повторяется до тех пор, пока оператор-> функциявозвращает значение не классового типа.
Я думал, что я знал, какoperator->
работает (позвольте мне сказать, егорекурсивный путь, основанный на типе возврата), но я вижу, что я совершенно не знаю, как этона самом деле работает (я имею в виду, еготип возврата).
Когда я нашел это, я подумал, можно ли действительно определить и использовать что-то вродеdouble operator->()
для общей структурыS
Я никогда не использовал такой оператор таким образом.
В качестве примера рассмотрим код ниже:
struct S {
constexpr double operator->() noexcept {
return 3.14;
}
};
int main() {
static_assert(3.14 == S{}.operator->(), "!");
}
Синтаксис довольно уродливый, и я не вижу никакого использования такого оператора или подобного.
Какова реальная цель позволить программистам вернутьdouble
илиfloat
от этого оператора?
Что может быть для них возможным?