> On Sep 20, 2017, at 3:36 PM, Xiao-Yong Jin <jinxiaoy...@gmail.com> wrote: > > reinterpret_cast works from smaller sizes to larger sizes. > > So simply > reinterpret_cast<uint64_t *>(thread)
Sorry, I meant reinterpret_cast<uint64_t>(thread) > > should work for both of our machines (size_t is uint64_t for me). > > ... until some pthread implementation decides to hand you a larger sized > struct for pthread_t. > >> On Sep 20, 2017, at 3:26 PM, Juergen Sauermann >> <juergen.sauerm...@t-online.de> wrote: >> >> 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 >>>>> <juergen.sauerm...@t-online.de> >>>>> 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 >>>>>>> <juergen.sauerm...@t-online.de> >>>>>>> >>>>>>> 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) >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>> >> >