diff options
Diffstat (limited to 'src/boost/libs/mp11/test/mp_invoke_q.cpp')
-rw-r--r-- | src/boost/libs/mp11/test/mp_invoke_q.cpp | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/boost/libs/mp11/test/mp_invoke_q.cpp b/src/boost/libs/mp11/test/mp_invoke_q.cpp new file mode 100644 index 00000000..777f44bb --- /dev/null +++ b/src/boost/libs/mp11/test/mp_invoke_q.cpp @@ -0,0 +1,63 @@ + +// Copyright 2015, 2017 Peter Dimov. +// +// 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 <boost/mp11/utility.hpp> +#include <boost/mp11/integral.hpp> +#include <boost/core/lightweight_test_trait.hpp> +#include <type_traits> + +using boost::mp11::mp_invoke_q; +using boost::mp11::mp_size_t; + +struct Q1 +{ + template<class...> using fn = void; +}; + +struct Q2 +{ + template<class...> class fn; +}; + +struct Q3 +{ + template<class... T> using fn = mp_size_t<sizeof...(T)>; +}; + +struct Q4 +{ + template<class T1, class... T> using fn = T1; +}; + +struct Q5 +{ + template<class T1, class T2> using fn = T2; +}; + +int main() +{ + BOOST_TEST_TRAIT_TRUE((std::is_same<mp_invoke_q<Q1>, void>)); + BOOST_TEST_TRAIT_TRUE((std::is_same<mp_invoke_q<Q1, int>, void>)); + BOOST_TEST_TRAIT_TRUE((std::is_same<mp_invoke_q<Q1, int[], char[]>, void>)); + + BOOST_TEST_TRAIT_TRUE((std::is_same<mp_invoke_q<Q2>, Q2::fn<>>)); + BOOST_TEST_TRAIT_TRUE((std::is_same<mp_invoke_q<Q2, int>, Q2::fn<int>>)); + BOOST_TEST_TRAIT_TRUE((std::is_same<mp_invoke_q<Q2, int[], char[]>, Q2::fn<int[], char[]>>)); + + BOOST_TEST_TRAIT_TRUE((std::is_same<mp_invoke_q<Q3>, mp_size_t<0>>)); + BOOST_TEST_TRAIT_TRUE((std::is_same<mp_invoke_q<Q3, int>, mp_size_t<1>>)); + BOOST_TEST_TRAIT_TRUE((std::is_same<mp_invoke_q<Q3, int[], char[]>, mp_size_t<2>>)); + + BOOST_TEST_TRAIT_TRUE((std::is_same<mp_invoke_q<Q4, int>, int>)); + BOOST_TEST_TRAIT_TRUE((std::is_same<mp_invoke_q<Q4, int[], char[]>, int[]>)); + + BOOST_TEST_TRAIT_TRUE((std::is_same<mp_invoke_q<Q5, int, float>, float>)); + + return boost::report_errors(); +} |