C ++ 17 и перегруженные функции - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть проект, который я пытался обновить, чтобы я мог использовать заголовок в VS2019. Когда я изменяю опцию компилятора «Стандарт языка C ++» с «По умолчанию» на «/ std: c ++ 17», следующий код ломается:

class ATL_NO_VTABLE CAPropertyPage :
{
public:
  struct INFO_STRUCT
  {
    INFO_STRUCT()
      : deviceType(0)
      , index(0)
    {
    };

    bool operator ==(const CAtlString &str)
    {
      return name.CompareNoCase(str) == 0;
    }

    bool operator ==(const CString &str)
    {
      return name.CompareNoCase(str) == 0;
    }

    bool operator ==(const INFO_STRUCT &is)
    {
      return name.CompareNoCase(is.name) == 0;
    }

    CString name;
    DWORD   deviceType;
    int     index;
  };
};

Он прекрасно компилируется с Default, но с / std: c ++ 17 Я получаю следующее сообщение об ошибке:

error C2535: 'bool CAPropertyPage::INFO_STRUCT::operator ==(const ATL::CAtlString &)': member function already defined or declared
message : see declaration of 'CAPropertyPage::INFO_STRUCT::operator =='

Таким образом, перегруженная функция не поддерживается. Возможно ли иметь перегруженные функции при использовании параметра компилятора / std: c ++ 17?

1 Ответ

0 голосов
/ 09 апреля 2020

Спасибо, Реми Лебо, за ответ. CString и CAtlString кажутся одинаковыми в C ++ 17. Когда я закомментирую перегруженную версию с помощью CAtlString, она компилируется и разрешает вторую перегрузку, потому что она отличается.

...