模板名称消歧义:g++ vs clang++

Template name disambiguation: g++ vs clang++

提问人:JtTest 提问时间:4/30/2022 最后编辑:Adrian MoleJtTest 更新时间:4/30/2022 访问量:135

问:

前提:众所周知,g++ 和 clang++ 在应用依赖名称的模板消歧规则时有时不一致或不合规。

在这方面,以下代码在 g++ 下编译,但不在 clang++ 下编译

template<class T1>
struct A {
    template <class T2>
    class Anested {
        public:
        typedef A<T2> Other;
    };
};

template <class T>
struct B {
    typedef B<T> Myself;
    typedef typename T::Anested<Myself>::Other Other; //clang++ requires "template" before "Anested" to compile
};

int main() {
    B<A<void>> b;
}

在这种情况下,clang++ 是兼容的(不是吗?),但我想知道“template”关键字在这种语句中是否实际上是多余的。如果不是多余的,请您举一些例子来证明g++遵循的演绎规则是有缺陷的吗?

C 模板 g clang++ dependent-name

评论


答: 暂无答案