继承构造函数时出现GCC编译错误

6

这段代码由gcc编译时出现错误

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...;
};

我不明白为什么会出现这种情况。


更新

对于gcc而言,构造函数继承也会破坏代码。

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

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

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

gcc 还是 g++ - JohnFilleau
只是确认一下 ;) - JohnFilleau
你使用的 GCC 版本是什么? - NathanOliver
无论是哪个版本,GCC 9.2也会出现错误。 - NutCracker
g++ 看起来一直到 9.3 版本甚至是 trunk 版本都在抱怨。 - Ted Lyngmo
显示剩余2条评论
1个回答

1

1
是的,它已经被修复了:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94310 - tilin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接