C++ 列表初始化中元素的求值顺序

C++ 列表初始化中元素的求值顺序,c++,gcc,c++11,initializer-list,operator-precedence,C++,Gcc,C++11,Initializer List,Operator Precedence,在报告中,@Dietmar给出了以下解决方案: template <typename... T> std::tuple<T...> parse(std::istream& in) { return std::tuple<T...>{ T(in)... }; } 实际产量: A1::data = A2 A2::data = A1 我的测试代码有没有做错什么?我将代码更改为: std::stringstream ss("A1 A2"); st

在报告中,@Dietmar给出了以下解决方案:

template <typename... T>
std::tuple<T...> parse(std::istream& in) 
{
    return std::tuple<T...>{ T(in)... };
}
实际产量:

A1::data = A2
A2::data = A1
我的测试代码有没有做错什么?我将代码更改为:

std::stringstream ss("A1 A2");
std::tuple<A1,A2> args{A1(ss), A2(ss)};
std::cout << std::get<0>(args) << std::endl;
std::cout << std::get<1>(args) << std::endl
std::stringstream ss(“A1 A2”);
std::tuple

这是编译器中的错误吗?

回答我自己的问题。删除该问题不是一个好主意,因为将来可能有人会有相同的问题

对。这是GCC编译器中的一个bug


摘自@Johannes Schaub对问题的评论。

这是一个GCC错误。叮当答对了。你希望我们回答什么?“是的,这是一个错误,因为你的报价”。今天不是说过两次吗?在@Dietmar提出的问题和Dietmar提出的问题中,引用和示例表明顺序是从左到右的。@Johanneschaub litb:我只是想确定编译器中有一个bug,并且我的测试代码绝对没有问题。在gcc上完成bug报告过程之前,我还会进行检查。请注意,Microsoft的Visual Studio 12(2013)也有相同的bug,我刚才在这里报告的内容将在MSVC 2015更新2()中修复
A1::data = A2
A2::data = A1
std::stringstream ss("A1 A2");
std::tuple<A1,A2> args{A1(ss), A2(ss)};
std::cout << std::get<0>(args) << std::endl;
std::cout << std::get<1>(args) << std::endl