我正在将一些c ++代码从VS2010移动到VS2013,并遇到了一些无法编译的代码。经过进一步调查,似乎在类声明中定义友元函数会导致VS2013出现问题。
以下是一个例子:
class foo
{
friend float lerp(float a, float b, float c)
{
return 1.0f;
}
float uselerp()
{
return lerp(1.f, 1.f, 1.f);
}
};
此代码在VS2010中编译良好,但在2013年,产生以下错误: friend.cpp(15):错误C3861:'lerp':找不到标识符
有趣的是,这段代码在VS2013下编译得很好:
class foo
{
friend float lerp(float a, float b, float c);
float uselerp()
{
return lerp(1.f, 1.f, 1.f);
}
};
float lerp(float a, float b, float c)
{
return 1.0f;
}
(我意识到朋友的功能实际上没有使用该类)
定义的友元函数是否存在导致该错误的有效(即基于C ++标准)的原因,或者这是MSFT实现的问题?