Даже если в классе есть конструктор MQLCopir(const char *, const char *), всё равно вызывается MQLCopir(const std::string&, bool)?
Если имеется ввиду, что вызывается "не тот" конструктор, когда в классе есть только два - MQLCopir(const std::string&, const std::string&) и MQLCopit(const std::string&, bool), то проблема в том, что при перегрузке пользовательские преобразование (а преобразование из const char * в std::string посредством её конструктора является именно пользовательским преобразованием) рассматриваются в последнюю очередь. Если мы прикинемся компилятором, то при вызове MQLCopir(const_char_ptr1, const_char_ptr2) можно расставить уровень "плохости" преобразований так (при этом 0 - преобразование не требуется, 1 - повышение, 2 - встроенное приведение, 3 - определённое пользователем приведение):
MQLCopir(const std::string&, const std::string&): 3 3
MQLCopir(const std::string&, bool): 3 2
Понятно, что компилятор выберет второй вариант, потому что он лучше в отношении "плохости" преобразований.
0
|