Следующий код дает тот же результат, конечно, используя std::forward_like, вы можете поместить весь self.member в скобки, в этом весь смысл? (скомпилировать с помощью clang 18)
#include
#include
auto g(int &&) { std::println("rvalue g"); }
auto g(int const &&) { std::println("const rvalue g"); }
auto g(int &) { std::println("lvalue g"); }
auto g(const int &) { std::println("const lvalue g"); }
struct S {
int member;
auto use_foward_like(this auto &&self) {
g(std::forward_like(self.member));
}
auto use_foward(this auto &&self) {
g(std::forward(self).member);
}
};
int main() {
S s;
std::println("use forward_like:");
s.use_foward_like();
std::as_const(s).use_foward_like();
std::move(s).use_foward_like();
static_cast(s).use_foward_like();
std::println("\nuse forward:");
s.use_foward();
std::as_const(s).use_foward();
std::move(s).use_foward();
static_cast(s).use_foward();
}
Подробнее здесь: https://stackoverflow.com/questions/781 ... rward-like
В чем именно разница между std::forward и std::forward_like? ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение