繁体   English   中英

如何在 clang 和 gcc 中编译这个?

[英]How to compile this both in clang and gcc?

下面的代码在 g++ 中编译,但在 clang++ 中出错。 如何修复此代码以便它可以在两者中编译?

class A {
    private:
        template<int _N> class B {
            public:
                static constexpr int N = _N;
        };
        class C {
            public:
                template <typename B>
                B* func();
        };
};

template <typename B>
B* A::C::func()
{
    constexpr int N = B::N;
}

clang 之前的 clang 11 未打包以正确解析名称B 解决方案是使用另一个模板参数名称:

template <typename D>
D* A::C::func()
{
    constexpr int N = D::N;
}

完整示例至少需要公众访问 A::C 或朋友 function。

class A {
    private:
        template<int N_> class B {
            public:
                static constexpr int N = N_;
        };
        class C {
            public:
                template <typename B>
                B* func();
        };
    friend int main();
};

template <typename D>
D* A::C::func() {
    constexpr int N = D::N;
    return nullptr;
}

int main() {
    A::C c;
    auto *n = c.func<A::B<0>>();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM