在 z/OS 上,pthread_t
类型是一个包含 member 的结构体char __[8];
。我试图将其从返回值转换为int64_t
. 我收到以下错误:
CCN5216 (S) “char [8]”类型的表达式无法转换为“int64_t”类型
但是,如果我使用临时变量tmp
,它就可以工作。我可以使用 Visual Studio 2015(定义mypthread
类似于 zos 的自定义结构pthread_t
)编译此代码而不会出错。你知道为什么 xlc++ 这个演员阵容有问题吗?铸造标准是否符合?
#define _OPEN_THREADS
#include <iostream>
#include <stdint.h>
#include <pthread.h>
pthread_t apr_os_thread_current() {
return pthread_t();
}
int64_t getId() {
pthread_t tmp = apr_os_thread_current();
return (int64_t) tmp.__; // ok
//return (int64_t) apr_os_thread_current().__; // CCN5216
//return reinterpret_cast<int64_t>(apr_os_thread_current().__); // CCN5216
}
int main() {
std::cout << getId() << std::endl;
return 0;
}