Поскольку в вашем классе есть компилятор, сгенерированный конструктором копирования / перемещения.
Итак, у вас есть дубликаты для
foo(const foo&) // foo can be constructed by {7,3}
foo(vector<int>) // vector<int> can be constructed by {7,3}
Возможно, вы пытаетесь сделать инициализация списка , но ваш синтаксис неверен.
Нет T object({arg1, arg2, ...})
Но если вы используете foo x{7,3}
(что соответствует T object{arg1, arg2, ...}
), это сработает и вызовет foo(int,int)
.
Кстати, вы должны учиться и всегда читать ошибку , по крайней мере, на Wandbox , ошибка довольно ясна
ошибка: вызов перегружен 'foo () 'является неоднозначным ...
примечание: кандидат:' foo :: foo (std :: vector) '
примечание: кандидат:' constexpr foo :: foo (const foo &) '
примечание: кандидат:' constexpr foo :: foo (foo &&) '
Это ясно показывает, что он считает кандидатом.