_VACPP_HASH_FUNCTION_CHECK 在 IBMi7.4 上尝试使用 LANGLVL(*EXTENDED0X) 编译 C++ 代码时出错

_VACPP_HASH_FUNCTION_CHECK error while trying to compile C++ code with LANGLVL(*EXTENDED0X) at IBMi7.4

我正在尝试在 pub400.com:

使用 LANGLVL(*EXTENDED0X) 用 unordered_map 编译简单的 C++ 程序
#include <stdlib.h>
#include <stdio.h>
#include <unordered_map>
#include <string>

int main(int argc, char* argv[])
{
  printf("Hello world!\n");
  std::tr1::unordered_map<long long, std::string> test;
  test[123] = std::string("123");


  return 0;
}    

但失败并显示消息:

"QSYSINC/STD(xhashtbl)", line 530.50: CZP0274(30) The name lookup for  "_VACPP_HASH_FUNCTION_CHECK" did not find a declaration.              
"QSYSINC/STD(xhashtbl)", line 530.50: CZP1226(0) Declarations for      non-dependent names are resolved in the template definition.          
"QSYSINC/STD(xhashtbl)", line 530.50: CZP1227(0)                       "_VACPP_HASH_FUNCTION_CHECK" does not depend on a template argument.  The compilation failed.

Google 在 2016 年用 IBM AIX C++ 编译器搜索了同样的问题(这是一个编译器错误)。 DSPJOB OUTPUT(*PRINT) 显示 pub400.com 运行最新的 IBM i 7.4。

是编译器错误还是我遗漏了什么?我办公室的 IBM i 7.3 TR9 也有同样的问题。 有什么想法吗?

谢谢。

这是他们 /QIBM/include/std/xhashtbl 的一个内部错误,你实际上可以自己修复它,你只需要通过关于 _VACPP_HASH_FUNCTION_CHECK 的 ifdef 检查排除整个 _HashFunctionCheck 函数。他们很久以前就在 zOS(或 AIX?)上修复了它,但忘了为 IBM i 移植它。