[英]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.