C++ Internals: STL Vector, Part 3
gahcep.com
gahcep.com
Usage of this syntax for main not only deviates from expected form, its presence in defining the one function every C++ developer knows by heart is self-defeating.
MessageWindow::Response MessageWindow::question(...);
MessageWindow::Icon MessageWindow::getIcon() { return _icon; }
...
auto MessageWindow::question(...) -> Response;
auto MessageWindow::getIcon() { return _icon; }
I was fairly nervous about it at first, but after using this syntax, I've grown to highly favor it. Being a huge fan of consistency, I've begun using only this style. Downside is it seems to annoy many other programmers much moreso than other style choices (like const foo vs foo const, tabs vs spaces, K&R vs 1TBS, etc.)I do kind of wish you could say "function" instead of "auto" here, but of course that wasn't a reserved keyword so it would have broken existing code.
For the ubiquitous main, "auto main() {}" return type deduction works pretty well. But I need a wrapper around main() anyway thanks to Windows corrupting argv[] when you pass in non-ANSI (Unicode) characters. So for my case, I have:
#include <nall/main.hpp>
auto nall::main(vector<string> args) { ... }
Where internally, the real main() will use CommandLineToArgvW + WideCharToMultiByte on Windows to return UTF-8 arguments. So many cross-platform apps skip this step, and make opening files named in other languages impossible via command-line.Great points for the repurposing of auto present in the latest standard... Not for use in defining main.
Your case regarding Windows and wrapping main I'm sure is valid. But is not the case with the article's definition.
This comment is very interesting. His syntax reminds me of Python syntax of:
for i in [1,2,3]:
Isn't that what the future C++ is trying to achieve? Simplified syntax? for (int i = 1; i != 10; ++i)I think your question was rhetorical, in any case the answer is yes. In fact the proposed C++ pythy syntax tries go even further http://pfultz2.github.io/Pythy/ . IIRC its Clang only. Its author hangs out on HN sometimes and would be able to provide more information
for i in range(1,4): for (int i = 1; i <= 9; ++i)
is both more concise and requires less thinking to know what's going on. for (auto item : {})
and then filled in the first sequence of numbers that popped into his head.It could be, but we don't know that. And that's exactly my point. The syntax he uses forces us to think and even speculate about that. So for the particular sequence he chose for his example, it would be less ambiguous to generate the range algorithmically.
If you should be so inclined later.
https://www.reddit.com/r/cpp/comments/3gd29t/c_internals_stl...
Doing so will help prevent "interesting" behaviour and help expose assumptive template definitions in a code base.