У меня есть бред Я использую классы-оболочки для нативных типов, однако при использовании типов-оболочек в качестве аргументов функции неявное преобразование для указателя на символ в 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.