当我在寻找有关我在源代码中遇到的编译问题的线索时,我遇到了这个与函数查找相关的错误报告(针对 Mozilla 的 JavaScript 引擎源代码) 。引用错误报告:
TypedArrayTemplate (显然)是一个模板,它引用了 INT_TO_JSVAL,一个静态内联函数,没有前缀“::”。这会破坏 xlC,因为它无法解析 INT_TO_JSVAL。如果在模板参数的上下文中找不到非限定名称,则该标准不要求考虑静态。g++ 做这个后备,xlC 没有。
来自编译器的信息性消息:
(I) Static declarations are not considered for a function call if the function is not qualified.
在我的情况下,失败的代码类似于:
namespace N
{
static bool foo (std::string const &);
template <typename T>
void bar (T const &, std::string const & s)
{
// expected unqualified call to N::foo()
foo (s);
}
void baz (std::string const & s)
{
bar (s);
}
} // namespace N
xlC 实现的行为真的正确吗?2003 年或 2011 年的标准在哪里谈论这个?