[PATCH] D31163: Implement Pp0156r2 "Variadic Lock Guard, version 5"

Eric Fiselier via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Mar 22 15:07:29 PDT 2017


EricWF added a comment.

So Clang only very recently added support for deduction guides. We'll need to add `_LIBCPP_HAS_NO_DEDUCTION_GUIDES` and use it to guard the declarations and the tests.

Also I think the explicit deduction guides are incorrect and unneeded. The deduction guides you declare are `template <class Mutex> unique_lock(unique_lock<Mutex>) -> unique_lock<Mutex>` but no such constructor exists. I suspect the intent was to support deduction for the `unique_lock(mutex_type)` constructor but that already works implicitly.



================
Comment at: include/mutex:176
 
+template<class M> unique_lock(unique_lock<M>)
+    -> unique_lock<M>; // C++17
----------------
This should be guarded behind a feature test macro. I would suggest adding this to `__config`.

```
#if !defined(__cpp_deduction_guides) || __cpp_deduction_guides < 201611
# define _LIBCPP_HAS_NO_DEDUCTION_GUIDES
#endif
```


================
Comment at: include/mutex:705
 
-#endif // _LIBCPP_ABI_VARIADIC_LOCK_GUARD
+template<class... _Mutexes> scoped_lock(scoped_lock<_Mutexes...>)
+  -> scoped_lock<_Mutexes...>;
----------------
This should be guarded as well.


================
Comment at: test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex.pass.cpp:99
+
+#if TEST_STD_VER > 14
+	std::shared_lock sl(m);	// deduction guide
----------------
The tests for deduction guides should `static_assert(std::is_same_v<decltype(sl), Expected>);`.


================
Comment at: test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex.pass.cpp:57
+#if TEST_STD_VER > 14
+	std::unique_lock ul(m);	// deduction guide
+#endif
----------------
The tests for deduction guides should `static_assert(std::is_same_v<decltype(sl), Expected>);`.



https://reviews.llvm.org/D31163





More information about the cfe-commits mailing list