提问人:JtTest 提问时间:4/30/2022 最后编辑:Adrian MoleJtTest 更新时间:4/30/2022 访问量:135
模板名称消歧义:g++ vs clang++
Template name disambiguation: g++ vs clang++
问:
前提:众所周知,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++遵循的演绎规则是有缺陷的吗?
答: 暂无答案
评论