#if defined(__clang__) #define THREAD_ANNOTATION_ATTRIBUTE_(x) __attribute__((x)) #else #define THREAD_ANNOTATION_ATTRIBUTE_(x) #endif #define CAPABILITY(x) THREAD_ANNOTATION_ATTRIBUTE_(capability(x)) #define ACQUIRE() THREAD_ANNOTATION_ATTRIBUTE_(acquire_capability()) #define RELEASE() THREAD_ANNOTATION_ATTRIBUTE_(release_capability()) class CAPABILITY("mutex") Mutex { public: void lock() ACQUIRE(); void unlock() RELEASE(); }; void Mutex::lock() ACQUIRE() {} void Mutex::unlock() RELEASE() {} int main() { Mutex m; m.lock(); m.unlock(); return 0; }