Move unused to util

This commit is contained in:
Denis Blank 2017-09-28 05:23:21 +02:00
parent 7accbdf41c
commit eb8528c90e
4 changed files with 20 additions and 17 deletions

View File

@ -20,7 +20,8 @@
SOFTWARE.
**/
#include "continuable/continuable.hpp"
#include <continuable/continuable.hpp>
#include <continuable/detail/util.hpp>
using cti::detail::util::unused;
@ -40,7 +41,9 @@ void creating_continuables() {
}
struct ResultSet {};
template <typename... Args> void mysql_handle_async_query(Args&&...) {}
template <typename... Args>
void mysql_handle_async_query(Args&&...) {
}
auto mysql_query(std::string query) {
return cti::make_continuable<ResultSet>([query = std::move(query)](

View File

@ -45,7 +45,7 @@ template <typename C> void assert_async_completion(C&& continuable) {
*called = true;
// Workaround for our known GCC bug.
traits::unused(std::forward<decltype(args)>(args)...);
util::unused(std::forward<decltype(args)>(args)...);
});
ASSERT_TRUE(*called);
}
@ -53,7 +53,7 @@ template <typename C> void assert_async_completion(C&& continuable) {
template <typename C> void assert_async_never_completed(C&& continuable) {
std::forward<C>(continuable).then([](auto&&... args) {
// Workaround for our known GCC bug.
traits::unused(std::forward<decltype(args)>(args)...);
util::unused(std::forward<decltype(args)>(args)...);
FAIL();
});
@ -111,7 +111,7 @@ void assert_async_types(C&& continuable, traits::identity<Args...> expected) {
assert_async_validation(
std::forward<C>(continuable), [&](auto... actualPack) {
auto actual = traits::identity<decltype(actualPack)...>{};
traits::unused(expected, actual,
util::unused(expected, actual,
std::forward<decltype(actualPack)>(actualPack)...);
static_assert(

View File

@ -159,18 +159,6 @@ constexpr auto get(identity<T...>) noexcept {
return identity_of<at_t<I, T...>>();
}
/// Helper to trick compilers about that a parameter pack is used
template <typename... T>
void unused(T&&... args) {
auto use = [](auto&& type) mutable {
(void)type;
return 0;
};
auto deduce = {0, use(std::forward<decltype(args)>(args))...};
(void)deduce;
(void)use;
}
namespace detail {
// Equivalent to C++17's std::void_t which targets a bug in GCC,
// that prevents correct SFINAE behavior.

View File

@ -43,6 +43,18 @@ namespace cti {
namespace detail {
/// Utility namespace which provides useful meta-programming support
namespace util {
/// Helper to trick compilers about that a parameter pack is used
template <typename... T>
void unused(T&&... args) {
auto use = [](auto&& type) mutable {
(void)type;
return 0;
};
auto deduce = {0, use(std::forward<decltype(args)>(args))...};
(void)deduce;
(void)use;
}
namespace detail {
template <typename T, typename Args, typename = traits::void_t<>>
struct is_invokable_impl : std::common_type<std::false_type> {};