当前位置:  开发笔记 > 编程语言 > 正文

依赖名称的模板消除歧义

如何解决《依赖名称的模板消除歧义》经验,为你挑选了0个好方法。

我通过编译以下示例遇到了以下问题:

template 
class Matrix {
public:
    template 
    int head() {
        return Idx;
    }
};

template 
class Test {
    static constexpr int RayDim = 3;
public:
    int func() const {
        Matrix yF;
        return yF.head<1>();
        //        ^ is template keyword required here?
    }
};

struct Empty {};

void test() {
    Test t;
}

链接到编译器资源管理器:https : //godbolt.org/z/js4XaP

该代码使用GCC 9.2和MSVC 19.22进行编译,但不能使用clang 9.0.0进行编译。Clang指出需要template关键字。如果static constexpr int RayDim = 3;移入int func() constclang接受它。

如代码块中的注释所述,是否需要template关键字yF.head<1>()

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有