4

以下 C++11 代码有什么问题:

struct S
{
    int a;
    float b;
};

struct T
{
    T(S s) {}
};

int main()
{
    T t(S{1, 0.1});  // ERROR HERE
}

gcc 在指示的行出现错误(我尝试了 gcc 4.5 和 gcc 4.6 的实验版本)

这不是有效的 C++11,还是 gcc 的实现不完整?

编辑:这是编译器错误:

test.cpp: In function int main():
test.cpp:14:10: error: expected ) before { token
test.cpp:14:10: error: a function-definition is not allowed here before { token
test.cpp:14:18: error: expected primary-expression before ) token
test.cpp:14:18: error: expected ; before ) token
4

2 回答 2

3

根据提案N2640,您的代码应该可以工作;应创建一个临时 S 对象。g++ 显然试图将这个语句解析为一个声明(一个函数 t 期望 S),所以对我来说它看起来像一个错误。

于 2011-01-03T03:22:06.930 回答
0

调用不带括号的构造函数似乎是错误的,这似乎有效:

struct S
{
    int a;
    float b;
};

struct T
{
    T(S s) {}
};

int main()
{
    T t(S({1, 0.1}));  // NO ERROR HERE, due to nice constructor parentheses
    T a({1,0.1}); // note that this works, as per link of Martin.
}

:s您的示例不起作用似乎是合乎逻辑的(至少对我而言)。将 S 替换为 avector<int>会得到相同的结果。

vector<int> v{0,1,3}; // works
T t(vector<int>{0,1,2}); // does not, but
T t(vector<int>({0,1,2})); // does
于 2011-01-03T09:56:52.720 回答