However, thread1, as returned by create_thread, and the thread_ref returned by current_thread inside the newly spawned thread will indeed be equivalent. They will not only compare equal, but will be interchangeable in every way. Very good.
Do You plan to change the current implementation ( would be a partial re-implementation) ?
How about comparing address of thread objects (using the current design)? Will that satisfy your needs? As I explained some messages ago, if threads are noncopyable, you can use address of thread objects as a comparable thread_id, while not needing the implementation details (such the Windows handles) at all. If you use this, you need to be careful not to create a thread using the no-parameters constructor, becuase it will entirely ruin my philosophy...