Я удивлен следующее сообщение об ошибке компилятора:«Лишние элементы структуры инициализатора» ошибка с 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{}};
^
НКУ дает аналогичную ошибку.
Я ожидал бы выражения t_{t}
, чтобы попытаться скопировать конструкцию t_
от t
. Поскольку S
имеет неявно созданный экземпляр копии, я бы не ожидал, что это будет проблемой.
Не могли бы вы объяснить, что здесь происходит?
«единообразный синтаксис инициализации следует избегать именно по этим причинам» ... и по многим другим причинам, таким как изменение семантики при изменении «S». – ipc
@ipc: Я бы не зашел так далеко, но факт в том, что иногда это может быть сложно: –
не такой унифицированный синтаксис инициализации? – zahir