Сообщение Re[4]: Аналог "discarding _" для С++ от 30.06.2025 7:27
Изменено 30.06.2025 7:27 rg45
Re[4]: Аналог "discarding _" для С++
Здравствуйте, so5team, Вы писали:
S>Самое простое, что сразу приходит в голову:
S>
Как вариант:
Только если присмотреться, окажется, что discarding_arg — это переименованный lvalue
S>Самое простое, что сразу приходит в голову:
S>
S>template<typename T>
S>struct discarding_arg
S>{
S> T _tmp;
S>public:
S> operator T&() &&
S> {
S> return _tmp;
S> }
S>};
S>void f(int & i) {
S> i = 0;
S>}
S>int main()
S>{
S> f(discarding_arg<int>{});
S>}
S>Как вариант:
template<typename T>
T& discarding_arg (T&& _tmp = T{})
{
return std::forward<T&>(_tmp); // До C++23 просто return _tmp;
}
void f(int & i) {
i = 0;
}
int main()
{
f(discarding_arg<int>{});
g(ComplexType(42, 3.14, "Hello"))
}Только если присмотреться, окажется, что discarding_arg — это переименованный lvalue
Автор: rg45
Дата: 29.06.25
Дата: 29.06.25
Re[4]: Аналог "discarding _" для С++
Здравствуйте, so5team, Вы писали:
S>Самое простое, что сразу приходит в голову:
S>
Как вариант:
Только если присмотреться, окажется, что discarding_arg — это переименованный lvalue
S>Самое простое, что сразу приходит в голову:
S>
S>template<typename T>
S>struct discarding_arg
S>{
S> T _tmp;
S>public:
S> operator T&() &&
S> {
S> return _tmp;
S> }
S>};
S>void f(int & i) {
S> i = 0;
S>}
S>int main()
S>{
S> f(discarding_arg<int>{});
S>}
S>Как вариант:
template<typename T>
T& discarding_arg (T&& _tmp = T{})
{
return std::forward<T&>(_tmp); // До C++23 просто return _tmp;
}
void f(int & i) {
i = 0;
}
int main()
{
f(discarding_arg<int>{});
g(ComplexType(42, 3.14, "Hello"));
}Только если присмотреться, окажется, что discarding_arg — это переименованный lvalue
Автор: rg45
Дата: 29.06.25
Дата: 29.06.25