January 2018
Intermediate to advanced
374 pages
9h 53m
English
In the preceding code, the global operator== method only accepts r-values. If we were to accept an l-value, we could end up accidentally misusing the proxy, like this:
auto fail() {
auto concat = String("Cole") + String("Porter");
auto is_cole_porter = concat == String("ColePorter");
}
The problem here is that both the Cole and Porter strings are destructed when the comparison is executed, leading to a failure. As we force the concat object to be an r-value, the code will not compile when used like in the preceding code. Of course, you could brute-force it to compile using std::move(concat) == String("ColePorter"), but that wouldn't be a realistic case.