Код: Выделить всё
struct Bar {
void func() & {
printf("func() &\n");
}
void func() && {
printf("func() &&\n");
}
};
struct Foo {
Bar bar;
Bar &operator*() & {
return bar;
}
Bar &&operator*() && {
return static_cast(bar);
}
};
int main() {
Foo foo;
(*foo).func(); // prints func() &
(*Foo()).func(); // prints func() &&
}
Код: Выделить всё
struct Foo {
// ...
Bar *operator->() & {
return &bar;
}
// this should return "pointer to rvalue Bar"
Bar *operator->() && {
return &bar;
}
};
Код: Выделить всё
int main() {
Foo foo;
foo->func(); // prints func() &
Foo()->func(); // prints func() &
}
- можно ли иметь оператор-> каким-то образом поддерживает категорию значений так же, как оператор*, сохраняя при этом тот же синтаксис вызова?
- разве это не дыра в системе типов C++?
Подробнее здесь: https://stackoverflow.com/questions/782 ... lue-rvalue
Мобильная версия