We just need an opaque pointer for C, so we can retain the type safety
for C++ by conditionally compiling a '__thread_identifier' type as
'class Thread' for C++.
The warning:
clang++ -MMD -MF .threads.o.d -fPIC -c threads.cc -Wall -g -O3 -Iinclude -I.
In file included from schedule.cc:4:
./threads-model.h:41:1: warning: 'Thread' defined as a class here but previously declared as a struct [-Wmismatched-tags]
class Thread {
^
include/threads.h:9:1: note: did you mean class here?
struct Thread; /* actually, class; but this is safe */
^~~~~~
class
#define __THREADS_H__
/* Forward declaration */
-struct Thread; /* actually, class; but this is safe */
+#ifdef __cplusplus
+typedef class Thread *__thread_identifier;
+#else
+/* For C, we just need an opaque pointer */
+typedef void *__thread_identifier;
+#endif
#ifdef __cplusplus
extern "C" {
typedef void (*thrd_start_t)(void *);
typedef struct {
- struct Thread *priv;
+ __thread_identifier priv;
} thrd_t;
int thrd_create(thrd_t *t, thrd_start_t start_routine, void *arg);