让.template operator
构造工作的最佳方式是向 IBM 提交错误报告。
此代码符合 C++ 标准。事实上,这是编写此代码的唯一合法方式。
当您提交报告时,您可以使用以下内容作为证据:
§14.2/4
状态:
当成员模板专业化的名称出现在 . 或 -> 在后缀表达式中...并且后缀表达式的对象表达式是类型相关的...成员模板名称必须以关键字模板为前缀。...
第一部分:“ the name of a member template specialization
”,因为operator()<int>
是成员模板特化的名称,所以适用。有证据表明§14.2/1
:
模板特化可以由template-id引用:
§14.2/1
然后为匹配的模板 ID指定语法operator()<int>
。
第二部分:“ and the object expression of the _postfix-expression_ is
type-dependent
”,适用,因为obj
它依赖于类型。obj
是类型相关的,因为 §14.6.2.2/3
:
如果一个id 表达式包含以下内容,则它是类型相关的: - 一个通过名称查找与一个或多个声明为依赖类型的声明相关联的标识符,...
在这种情况下,obj
与 相关联T&
,这是一个依赖类型(因为T
是模板参数)。
这只是确定答案的一半,因为我没有为我提出的许多主张提供参考。不过,我已经在这里待了一个小时,所以可能是时候停下来了。