Hi Xiao-Yong,
I can compile this:
<<
reinterpret_cast<uint64_t>(
reinterpret_cast<void *>(thread))
Please let me know if it compiles on you box as well.
Best Regards,
Jürgen
On 09/20/2017 10:00 PM, Juergen
Sauermann wrote:
Hi Xiao-Yong,
with
reinterpret_cast<size_t> I am getting (gcc
4.8) this:
Thread_context.cc:
In member function ‘void
Thread_context::print(std::ostream&) const’:
Thread_context.cc:73:42: error: invalid cast from type
‘pthread_t {aka long unsigned int}’ to type ‘size_t {aka
unsigned int}’
<< reinterpret_cast<size_t>(thread)
^
make[1]: *** [apl-Thread_context.o] Error 1
It seems a little ridiculous to me that replacing a
good old C-style cast that worked fine for the
last 10 years cannot be replaced by one of the 3 members of the
C++ zoo of casts in a portable way?
Maybe some intermediate cast to const void * can be done
on your machine?
Best Regards,
Jürgen
On 09/19/2017 11:44 PM, Xiao-Yong Jin
wrote:
Should have got back to you sooner, but static_cast is not allowed between pointer types and non-pointer types.
Thread_context.cc:73:11: error: static_cast from 'pthread_t' (aka '_opaque_pthread_t *') to 'int' is not allowed
<< static_cast<int>(thread)
^~~~~~~~~~~~~~~~~~~~~~~~
I need reinterpret_cast<size_t> here. I cannot reinterpret_cast<int> either, because of the difference in size.
On Sep 11, 2017, at 3:01 PM, Juergen Sauermann <address@hidden> wrote:
Hi Xiao-Yong,
I see. In this particular case the pthread_t is only used to identify a thread and
to distinguish it from other threads for debugging purposes. So as long as the
compiler does not complain about the cast everything is fine. Cast to void * instead of
int would also be an option.
/// Jürgen
On 09/11/2017 08:38 PM, Xiao-Yong Jin wrote:
I don't think there is a portable way of printing a variable of type pthread_t. It could be a struct, depending on the implementation. static_cast<int> is alright, but may not be useful in the future.
On Sep 11, 2017, at 1:08 PM, Juergen Sauermann <address@hidden>
wrote:
Hi Xiao-Yong,
thanks, maybe fixed in SVN 1011.
Problem with that error is that the casted type is not a pointer, at least on my machine.
/// Jürgen
On 09/11/2017 06:55 PM, Xiao-Yong Jin wrote:
At revision 1010
Thread_context.cc:72:65: error: cast from pointer to smaller type 'int' loses information
out << "thread #" << setw(2) << N << ":" << setw(16) << int(thread)
|