Итак, у меня есть этот код:
struct Foo {
Foo() { cout << "default\n"; }
Foo(const long long) { cout << "implicit\n"; }
};
struct Bar {
Bar(const short param) : param(param) {}
operator long long() const { return static_cast<long long>(param); }
const short param;
};
Я бы подумал, что Foo foo = Bar(13)
использовал бы мое неявное приведение, а затем конструктор преобразования. Но это ошибки :
ошибка: преобразование из Bar
в нескалярный тип Foo
запрашивается
Это работает нормально, хотя: Foo foo(Bar(13))
.Почему мое неявное приведение используется для явного преобразования, но не для неявного преобразования?
Правила, которые я получил от https://en.cppreference.com/w/cpp/language/copy_initialization, говорят:
Результатпреобразование, которое является выражением prvalue, если использовался конструктор преобразования, затем используется для прямой инициализации объекта