Mik*_*nes 2 c++ templates clang
我有以下代码在Visual Studio和g ++下编译好但在Clang我得到错误"错误:'ns :: B'是一个不完整的类型"
啊
#pragma once
namespace ns
{
class B;
class A
{
friend class B;
class Inner
{
public:
int x;
Inner(int x) : x(x) {}
};
public:
template<typename T>
T getB(int i)
{
B b = B(Inner(i));
return T(b);
}
};
}
Run Code Online (Sandbox Code Playgroud)
BH
#pragma once
#include "A.h"
namespace ns
{
class B
{
A::Inner i;
public:
B(A::Inner i) : i(i)
{}
operator int() const
{
return i.x;
}
};
}
Run Code Online (Sandbox Code Playgroud)
main.cpp中
#include "A.h"
#include "B.h"
int main()
{
ns::A a;
return a.getB<int>(5);
}
Run Code Online (Sandbox Code Playgroud)
从我的理解,代码应该工作,因为在模板实例化时,B是完整的.它是否正确?如果是这样,有没有办法在Clang中解决这个问题?
该计划格式错误,无需诊断.
如果出现以下情况,该计划格式错误,无需诊断:
- [...]
- 由于不依赖于模板参数的构造,或者在其定义之后立即对模板进行假设实例化将是不正确的,或者
- [...]