Visual Studio 2019 / C ++ 14 генерирует ошибку C3646 - PullRequest
0 голосов
/ 25 сентября 2019

Лучшее, что я могу определить, - это то, что символы, определенные в родительском классе, больше не переносятся в дочерний класс по умолчанию.Это противоречит тому, как я всегда считал, что C ++ работает.

template<typename T>
class Parent
{
public:
    typedef T* iterator;
};

template<typename T>
class Child : public Parent < T >
{
public:
    //using iterator = Parent<T>::iterator; // this fixes error C3646 and error C2059

    iterator begin(void)
    {
        return nullptr;
    }
};

1>Test1.cpp(14,1): error C3646:  'begin': unknown override specifier
1>Test1.cpp(18): message :  see reference to class template instantiation 'Child<T>' being compiled
1>Test1.cpp(14,16): error C2059:  syntax error: '('
1>Test1.cpp(15,1): error C2334:  unexpected token(s) preceding '{'; skipping apparent function body

Это началось, когда я изменил настройки файла на C ++ 14 или C ++ 17, до этого это былоХОРОШО.Кажется, нет никакого способа восстановить предыдущее поведение, даже выбор «По умолчанию» генерирует ошибки.В Visual Studio 2013 он по-прежнему работает нормально.

enter image description here

...