How would that be consistent with your own classes? "Oh no, you can't just use a 'Tree' object, you need to explicitly set that there are no leaves yet, no branches yet, no squirrels yet, etc… etc…"
Do you .clear() your vectors before you use them?
This sounds like newbies that do: #define TRUE (1 == 1)
Anyway the reason for which it would no pass review is that today you use one compiler, tomorrow you have to use another and then you have to review all these little details again. It's about saving money more than anything and you do that by not relying on compiler behavior.
If a different compiler breaks this behavior, it's not standard compliant and thus could do all sorts of stuff in every possible line, including in:
std::string pad = "";The '= ""' won't help you.
std::string pad = descriptive_name_here(path);
with the added bonus of being able to add "const" to that, for the benefit of the reader.
This is not relying on compiler implementation! Can you name one language that has strings that initialise to anything but a valid object containing an empty string?
This is not an obscure side-effect. This is like assuming "std::vector<int> v;" creates an empty vector, not a undefined-state vector container.
(I don't want someone coding C++ as if all objects are references. Coding in one language as if it were another is a well-known antipattern)
I ran into this article that puts quite nicely why the problem isn't the "else", but the "if" itself:
https://medium.com/@bartobri/applying-the-linus-tarvolds-goo...
This is what I meant in the other comment by preferring the non-branching.
Good thing then that it's mandated by the language reference, and not up to the compiler to decide. According to C++11, §21.4.2/1, an uninitialized std::string should be an object of class std::basic_string with non-null data and a size of 0.
It's clever, yes. The bad kind of clever that's also misguided.
That would break approximately ALL C code.
You're being ridiculous. You might as well try to protect against the meaning of "if" changing.
I've seen amateur code that tries to protect against "stdio.h" going away and therefore reimplementing everything in it. This is like that.
Believing that the meaning of everything can change means that you cannot use anything you didn't code yourself. You can't trust documented APIs, then that's some sort of programmer NIH nihilist.