I'll just leave this here:
#include <bits/stdc++.h>
using namespace std;
struct _in {
template<class T> operator T() {
T x;
cin >> x;
return x;
}
} in;
int main() {
vector a(in, 0.0);
for (auto& x : a) x = in;
string s = in;
cout << s << ' ' << a[2] << '\n';
}
Try with input
5
0.1 0.2 0.3 0.4 0.5
hello
Have a nice day
this is like, really cool
struct can be anonymous which makes it even cooler.
Unfortunately, this may lead to non-obvious errors like as follows:
Input: 1 2
Output: 2 1
Can you please explain why this happens?
Order of evaluation of any part of any expression, including order of evaluation of function arguments is unspecified (with some exceptions listed below). The compiler can evaluate operands and other subexpressions in any order, and may choose another order when the same expression is evaluated again.
So the second argument may trigger the T() before the first argument.
Ref: https://en.cppreference.com/w/cpp/language/eval_order
Undefined behaviour
That's true with any function though
Thanks for sharing this! Just a small improv: you can omit typename like that: