10
我通过以下编译器错误惊讶:'在结构初始化多余元素' 与误差C++ 11均匀初始化
template <typename T>
struct A
{
A(T t): t_{t} {}
T t_;
};
struct S
{
};
int main()
{
A<S> s{S{}};
}
该错误是(与铛):
test.cpp:4:16: error: excess elements in struct initializer
A(T t): t_{t} {}
^
test.cpp:15:10: note: in instantiation of member function 'A<S>::A' requested here
A<S> s{S{}};
^
GCC给出了类似的错误。
我期望表达t_{t}
试图从t
复制构造t_
。由于S
有一个隐式生成的拷贝构造函数,我不希望这是一个问题。
有人可以解释这里发生了什么吗?
“正是由于这些原因,应该避免使用统一的初始化语法......”以及其他许多原因,例如修改“S”时改变语义。 – ipc 2013-02-20 22:16:04
@ipc:我不会走得太远,但事实是,它可能会有时棘手:) – 2013-02-20 22:19:34
不是那么统一的初始化语法呢? – zahir 2013-02-20 22:21:37