我正在尝试使用 MSVC 12(Visual Studio 2013,更新 4)创建一个 C++ 程序,该程序使用std::initializer_list
具有std::string
成员的结构。我似乎遇到了 MSVC 中的错误。这是一个展示问题的最小示例:
#include <cassert>
#include <initializer_list>
#include <string>
namespace
{
struct TestStructure
{
std::string m_string;
int m_integer;
TestStructure(const std::string& string, int integer)
: m_string(string), m_integer(integer)
{
}
TestStructure(const TestStructure&) = default;
~TestStructure() = default;
TestStructure& operator=(const TestStructure&) = default;
};
}
int main(int, char **)
{
TestStructure structure("foobar", 12345);
std::initializer_list<TestStructure> structures({structure});
assert(structure.m_integer == 12345);
assert(structure.m_string == "foobar");
assert(structures.size() == 1);
assert(structures.begin()->m_integer == 12345);
assert(structures.begin()->m_string == "foobar"); // abort()'s here.
return EXIT_SUCCESS;
}
我希望这个程序能够毫无问题地编译和执行。但是,当我运行它时,最后一个断言似乎失败了。查看 Visual Studio 调试器,似乎structures.begin()->m_string == ""
.
我的程序是否格式不正确,或者这实际上是 MSVC 中的错误?这个问题是否有一些解决方法(除了不使用初始化列表)?