News for hackers. Stuff that matters.
Re:Popular Myths about C++, Part 1 by mikeash on Tuesday December 09, 2014 @10:13AM (#8723156)
The way most other languages handle it is that the list literal construct just creates a list, and if you want something else then you need to explicitly convert. For example, in Python:

    x = [1, 2, 3, 5, 8, 13] # this is a list of integers
    y = set([1, 2, 3, 5, 8, 13]) # this is a set of integers
There's nothing inherently wrong with C++'s initializer list approach. Nor is there anything inherently wrong with auto. But they collide in unfortunate ways because they haven't been designed such that they go well together. C++ is full of things like this. Responding with "well, that makes the most sense" for any given feature is missing the point entirely.
Re:Popular Myths about C++, Part 1 by jlarocco on Tuesday December 09, 2014 @10:32AM (#8723264)
> The way most other languages handle it is that the list literal construct just creates a list, and if you want something else then you need to explicitly convert. > For example, in Python:

> x = [1, 2, 3, 5, 8, 13] # this is a list of integers

> y = set([1, 2, 3, 5, 8, 13]) # this is a set of integers

Actually, that's not the best way to do it:

    y = {1, 2, 3, 5, 8, 13} # this is a set of integers without creating a list first.
    z = set(1, 2, 3, 5, 8, 13) # so is this

In C++ {} is syntactic sugar for "Create an initializer_list with these values," which is what happens when it's assigned to an "auto" variable. Not surprising at all. If you want a different type, you need to specify the type that you want.

Maybe it's confusing to beginners and people who don't take the time to learn the language, but C++ isn't catering to those people.

Don't get me wrong, there are a lot of "gotchas" in C++, I just don't think the two you've posted are very bad.

Re:Popular Myths about C++, Part 1 by mikeash on Tuesday December 09, 2014 @10:46AM (#8723351)
Um, the whole point of this discussion is about the claim that C++ is a good language for beginners to learn.

I have problems with using C++ to build real projects with experienced programmers too, but those are mostly different problems.

Re:Popular Myths about C++, Part 1 by maxlybbert on Tuesday December 09, 2014 @10:50AM (#8723381)
Well, to be fair, with "auto x = { 1, 2, 3, 4, 5, 6}" you will get a variable named "x", but it won't be a std::vector<int> (it'll be a std::initializerList<int>).