Есть код (прошу не спрашивать почему такой, это выжимка из большой библиотеки
):
struct A
{
operator size_t() const;
operator std::vector<std::string>() const;
};
// Где-то ниже....
A a;
std::vector<string_t> v1 = a; // (1) ОК
std::vector<string_t> v2(a); // (2) Error - Ambiguous...
Можно пояснить как логика тут работает (а-то я умудрился "пройти мимо")
В случае (1) — не можем найти конструктор из A() и вызывает оператор преобразования типа std::vector<std::string>. (Как точно называется это синтаксис?)
В случае (2) — пытаемся вызвать конструктор сразу и не можем выбрать преобразования, т.к. оба подходят.
У них действительно разная логика порядка поиска преобразований или я что-то путаю?
Какая возникает проблема:
struct B
{
B(const A& a) : v(a) {} // Тут используется логика и синтаксис варианта (2). Соответственно - Error - Ambiguous...
std::vector<std::string> v;
};
Как-то можно в списке инициализации сказать что нужно делать как в случае (1) ?