Проблема вызвана тем, что вы предоставляете аргумент времени ожидания в виде целочисленного значения со знаком , которое необходимо преобразовать в беззнаковое для первой версии функции (начиная с параметра времени ожидания) объявляется как UINT
).
т.е. первая версия функции требует преобразования для третьего аргумента, в то время как вторая версия функции требует преобразования для второго аргумента (FALSE
, то есть просто 0
, в string
). В этом случае ни одна из функций не лучше, чем другая, и разрешение перегрузки не выполняется.
Попробуйте явно дать третьему аргументу тип без знака
l_szOption = GetInput(13, FALSE, 30U * 10);
или
l_szOption = GetInput(13, FALSE, (UINT) 30 * 10);
(в зависимости от того, что вы предпочитаете), и код должен компилироваться, как ожидается.
Другими словами, компилятор абсолютно прав, чтобы жаловаться на ваш код. Ваш код действительно сломан. Проблема в вашем коде имеет ту же природу, что и в следующем простом примере
void foo(int i, unsigned j);
void foo(unsigned i, int j);
int main() {
foo(0, 0);
}
Этот код также не будет компилироваться по той же причине.