diff --git a/hpx/traits/is_tuple_like.hpp b/hpx/traits/is_tuple_like.hpp new file mode 100644 index 000000000000..f22edfa9c656 --- /dev/null +++ b/hpx/traits/is_tuple_like.hpp @@ -0,0 +1,27 @@ +// Copyright (c) 2017 Denis Blank +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#if !defined(HPX_TRAITS_IS_TUPLE_LIKE_HPP) +#define HPX_TRAITS_IS_TUPLE_LIKE_HPP + +#include + +#include +#include + +namespace hpx { namespace traits +{ + /// Deduces to a true type if the given parameter T + /// has a specific tuple like size. + template + struct is_tuple_like + : std::false_type { }; + template + struct is_tuple_like::value + )>::type> : std::true_type { }; +}} + +#endif diff --git a/tests/unit/traits/CMakeLists.txt b/tests/unit/traits/CMakeLists.txt index 5f528557e442..4cb3c7be65ec 100644 --- a/tests/unit/traits/CMakeLists.txt +++ b/tests/unit/traits/CMakeLists.txt @@ -5,6 +5,7 @@ set(tests is_callable + is_tuple_like ) foreach(test ${tests}) diff --git a/tests/unit/traits/is_tuple_like.cpp b/tests/unit/traits/is_tuple_like.cpp new file mode 100644 index 000000000000..89274ea57a68 --- /dev/null +++ b/tests/unit/traits/is_tuple_like.cpp @@ -0,0 +1,47 @@ +// Copyright (c) 2017 Denis Blank +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include +#include + +#if defined(HPX_HAVE_CXX11_STD_ARRAY) +#include +#endif + +#include +#include +#include +#include + +void tuple_like_true() +{ + using hpx::traits::is_tuple_like; + + HPX_TEST_EQ((is_tuple_like>::value), true); + HPX_TEST_EQ((is_tuple_like>::value), true); + +#if defined(HPX_HAVE_CXX11_STD_ARRAY) + HPX_TEST_EQ((is_tuple_like>::value), true); +#endif +} + +void tuple_like_false() +{ + using hpx::traits::is_tuple_like; + + HPX_TEST_EQ((is_tuple_like::value), false); + HPX_TEST_EQ((is_tuple_like>::value), false); +} + +/////////////////////////////////////////////////////////////////////////////// +int main(int argc, char* argv[]) +{ + { + tuple_like_true(); + tuple_like_false(); + } + + return hpx::util::report_errors(); +}