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