【发布时间】:2013-02-20 22:08:29
【问题描述】:
我对以下编译器错误感到惊讶:
template <typename T>
struct A
{
A(T t): t_{t} {}
T t_;
};
struct S
{
};
int main()
{
A<S> s{S{}};
}
错误是(带有clang):
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 有一个隐式生成的复制构造函数,我不认为这是个问题。
有人能解释一下这里发生了什么吗?
【问题讨论】:
标签: c++ c++11 copy-constructor initializer-list uniform-initialization