hsutter / cppfront

A personal experimental C++ Syntax 2 -> Syntax 1 compiler
Other
5.24k stars 224 forks source link

[BUG] Cannot initialize `std::map` with initializer list #1037

Open bluetarpmedia opened 3 months ago

bluetarpmedia commented 3 months ago

Describe the bug I'd like to initialize a std::map (and other associative containers) with an initializer list or some other terse syntax similar to C++.

To Reproduce I'm trying to translate the following C++ code into Cpp2:

std::map<std::string, int> m{{"CPU", 10}, {"GPU", 15}, {"RAM", 20}};

from the std::map example on cppreference.

This attempt fails:

m: std::map<std::string, int> = (("CPU", 10), ("GPU", 15), ("RAM", 20));

because it lowers to:

std::map<std::string,int> m {("CPU", 10), ("GPU", 15), ("RAM", 20)};

Both of the following succeed:

m: std::map<std::string, int> = (
        std::make_pair("CPU", 10),
        std::make_pair("GPU", 15),
        std::make_pair("RAM", 20));
m: std::map<std::string, int> = (
        :std::pair = ("CPU", 10),
        :std::pair = ("GPU", 15),
        :std::pair = ("RAM", 20));

But they don't have the same terse syntax as the original C++.

See also:

568 - [BUG] Multidimensional std::array initialization