G CC Ошибка компиляции при наследовании конструкторов - PullRequest
4 голосов
/ 24 марта 2020

Этот код скомпилирован g cc с ошибкой

template<typename>
struct B {
};

template<typename... Types>
struct A : public B<Types>... {
    using B<Types>::B...;
    using B<Types>::operator=...;
}

вывод компилятора

<source>:8:8: error: expected nested-name-specifier before 'B'

    8 |  using B<Types>::operator=...;

      |   

 ^

Но этот код компилируется без ошибок

template<typename>
struct B {
};

template<typename... Types>
struct A : public B<Types>... {
    using B<Types>::operator=...;
    using B<Types>::B...;
};

Я не могу понять, почему это происходит.


Обновление

для g cc, наследование конструктора также нарушает код

template<typename T>
struct B {
    void foo() {}
};

template<typename... Types>
struct A : public B<Types>... {
    using B<Types>::B...;

    void bar() {
        (B<Types>::foo() , ...);
    }
};
...