Компилятор C ++ сообщает о неоднозначном вызове функции при использовании класса Bool Wrapper - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть бред Я использую классы-оболочки для нативных типов, однако при использовании типов-оболочек в качестве аргументов функции неявное преобразование для указателя на символ в bool продолжает вызывать неоднозначную функцию компилятора ошибка вызова:

class VBool
{
   public:
      VBool(bool b):value(b){}

      template<class T>
      VBool(T)=delete;

   private:
      bool value;
};

class VString
{
   public:
      VString(const char* str):value(str){}

   private:
      std::string value;
};

void processVType(VBool vb){}
void processVType(VString vs){}

int main()
{
   processVType(""); // rejected as ambiguous by compiler.

   return 0;
}

Теперь компилятор позволяет: VBool b = true; И правильно отвергает: VBool b = "string";

Но как мне заставить компилятор правильно определить предполагаемую версию функции для вызова?

Примечание: я использую компилятор VCC с включенным языковым стандартом для C ++ 17.

1 Ответ

0 голосов
/ 26 апреля 2018

Добавить другую функцию с правильным параметром.

inline void processVType(const char* vs) { processVType(VString(vs)); }

Просто из любопытства, почему вы пытаетесь реализовать нечто подобное?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...