C ++ 11 vector push_back ambiguous

Рассмотрим следующий код:

#include <vector>

struct S { int a; double b; };

int main()
{
    std::vector<S> v;
    v.push_back({3, 4.5});
}

g ++ 4.4 жалуется, что вызов push_back () неоднозначен:

error: call of overloaded ‘push_back(<brace-enclosed initializer list>)’ is ambiguous
note: candidates are: void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = S, _Alloc = std::allocator<S>]
note:                 void std::vector<_Tp, _Alloc>::push_back(_Tp&&) [with _Tp = S, _Alloc = std::allocator<S>]

Это должно быть неоднозначным в соответствии со стандартом, или это просто проблема с g ++?

Я знаю, что ее можно решить, явно написав тип S:

v.push_back(S{3, 4.5});

но имя типа S может быть длинным, поэтому я бы предпочел не делать этого ...

17
задан HC4 - reinstate Monica 13 February 2012 в 06:06
поделиться