LINUX.ORG.RU

clang: member overload ambiguous

 ,


0

2

Имеется класс вида


struct A
{
 void f(const String&);
 String f(const int) const;
};


...
A* a = new A;
a->f(1); // clang9: error ambiguous overload

«Чинится» так static_cast<const A*>(a)->f(1);

В отдельно взятом примере - не воспроизводится.

В чем может быть проблема, идеи? Что тут шлангу не понятно? Разве что String не определен и компилятор думает что неопределенный тип - int.

★★★★★

Разве что String не определен и компилятор думает что неопределенный тип - int.

Каким образом String может оказаться int-ом?

anonymous ()

Разве что String не определен

Там объявление без определения, или что? Ты бы показал String.

Может, принимается int, а передается например long long.

anonymous ()
Ответ на: комментарий от anonymous

После выяаления ошибки уже ясно как чинить :)

Там много халтуры написано.

Если быть точным, то этот String наслелует от ATL:: CString, и у ATL::CString эти же конструкторы explicit. И вот когда «нормальным» компилятором это легаси начал собирать, все полезло.

invy ★★★★★ ()
Последнее исправление: invy (всего исправлений: 2)
Ответ на: комментарий от anonymous

int -> int и int -> char -> String не равносильны, int -> int лучше.

Дико — это читать такие комменты про равносильность, когда как в тредю было уже объяснено, откуда возникает неоднозначность.

anonymous ()
Ответ на: комментарий от anonymous

Да пофигу откуда она возникает. Дико что она возникает

Вижуалвасики, Жабаскриптеры и похапешники негодуют!!!1!111

как-то так if (length(isTrue) == 5) print "false"

anonymous ()
Ответ на: комментарий от anonymous

Дико что она возникает, и дико что крестанутые не считают это диким.

Отправь дефект-репорт, его даже примут, скорее всего. Если не забудут про твоё письмо.

anonymous ()