Visual Studio 2017 15.5 Breaks C ++ TypeDefs - PullRequest
       6

Visual Studio 2017 15.5 Breaks C ++ TypeDefs

0 голосов
/ 18 сентября 2018

У меня возникла проблема, после которой обновление Visual Studio 2017 до 15.5 привело к ошибкам во время компиляции для ранее работавшего приложения C ++.

В частности, он не смог правильно проанализировать определенные определения типов, как это было раньше, и конструкторы и аргументы методов, которые их использовали, создавали синтаксические ошибки во время компиляции.

Пример:

template <class T>
class Demo
{
public:
    typedef Demo<T> DEMO;

public:
    template <class T>
    class NestedDemo { };

public:
    typedef DEMO::NestedDemo<T> NESTED_DEMO;

private:
    NESTED_DEMO _attribute;

public:
    inline DEMO(NESTED_DEMO attribute)
        : _attribute(attribute)
    { }
};

Где сообщение об ошибке будет: «синтаксическая ошибка: отсутствует») перед идентификатором «атрибут» с ошибкой компиляции: C2146.

Edit: Исправлена ​​опечатка в примере.

Edit: Исправлена ​​еще одна опечатка.

Edit: Вот изображение примера, который не компилируется:

https://imgur.com/a/KO1m6fJ

1 Ответ

0 голосов
/ 18 сентября 2018

Использование определений типов теперь является тем, что MSVC определяет как не являющееся «[близким] к соответствию стандартам C ++», и как таковое больше не синтаксически допустимо при компиляции.

К счастью, это то, что мы можем отключить.

MSVC 2017 v15.5 добавил эту и несколько других опций в свойства проекта. Хотя я не знаю, есть ли другие способы обойти это, эта опция используется для отключения соответствия стандартам:

«C / C ++> Язык> Режим соответствия» (по умолчанию «Да» (/ permissive-) "после обновления)

Изменение значения на «Нет» решит проблему.

Для тех, кто заинтересован, вот сообщение в блоге об обновлении:

https://blogs.msdn.microsoft.com/vcblog/2017/11/15/msvc-conformance-improvements-in-visual-studio-2017-version-15-5/

А вот документ по данному варианту:

https://docs.microsoft.com/en-us/cpp/build/reference/permissive-standards-conformance?view=vs-2017

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