Информация об изменениях

Сообщение Вопрос про конструкторы от 07.08.2019 11:02

Изменено 07.08.2019 11:04 Videoman

Вопрос про конструкторы
Есть код (прошу не спрашивать почему такой, это выжимка из большой библиотеки ):
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) ?
//
Вопрос про конструкторы
Есть код (прошу не спрашивать почему такой, это выжимка из большой библиотеки ):
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) ?
//