TypedArrayTemplate is (obvIoUsly) a template,and it is referencing INT_TO_JSVAL,a static inline function,without prefixing it with “::”. This breaks xlC because it can not resolve INT_TO_JSVAL. The standard does not require that statics be considered if the unqualified name is not found in the context of the template arguments. g++ does this fallback,xlC does not.
来自编译器的信息消息:
(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年标准在哪里谈论?
解决方法
C 03 section 14.6.4.2候选函数[temp.dep.candidate]第1段:
For a function call that depends on a template parameter,if the function name is an unqualified-id but not a
template-id,the candidate functions are found using the usual lookup rules (3.4.1,3.4.2) except that:
For the part of the lookup using unqualified name lookup (3.4.1),only function declarations with external
linkage from the template deFinition context are found.For the part of the lookup using associated namespaces (3.4.2),only function declarations with external
linkage found in either the template deFinition context or the template instantiation context are found.
其中C 11变化为:
For a function call that depends on a template parameter,the candidate functions are found using the usual
lookup rules (3.4.1,3.4.2,3.4.3) except that:
For the part of the lookup using unqualified name lookup (3.4.1) or qualified name lookup (3.4.3),only
function declarations from the template deFinition context are found.For the part of the lookup using associated namespaces (3.4.2),only function declarations found in either the template deFinition context or the template instantiation context are found.
原文地址:https://www.jb51.cc/c/112278.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。