diff options
Diffstat (limited to 'src/boost/libs/callable_traits/test/args_constraints.cpp')
-rw-r--r-- | src/boost/libs/callable_traits/test/args_constraints.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/boost/libs/callable_traits/test/args_constraints.cpp b/src/boost/libs/callable_traits/test/args_constraints.cpp new file mode 100644 index 00000000..ef651cdb --- /dev/null +++ b/src/boost/libs/callable_traits/test/args_constraints.cpp @@ -0,0 +1,46 @@ + +/* +Copyright Barrett Adair 2016-2017 + +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE.md or copy at http ://boost.org/LICENSE_1_0.txt) + +*/ + +#include <boost/callable_traits/args.hpp> +#include "test.hpp" + +struct foo; + +template<typename T> +struct is_substitution_failure_args { + + template<typename> + static auto test(...) -> std::true_type; + + template<typename U, + TRAIT(boost::callable_traits::args, U, std::tuple)* = nullptr> + static auto test(int) -> std::false_type; + + static constexpr bool value = decltype(test<T>(0))::value; +}; + +int main() { + + CT_ASSERT(is_substitution_failure_args<int>::value); + CT_ASSERT(is_substitution_failure_args<int &>::value); + CT_ASSERT(is_substitution_failure_args<int (** const &)()>::value); + CT_ASSERT(is_substitution_failure_args<int (foo::** &)()>::value); + CT_ASSERT(is_substitution_failure_args<int (foo::** const)()>::value); + CT_ASSERT(is_substitution_failure_args<int (foo::** const &)()>::value); + CT_ASSERT(is_substitution_failure_args<int (foo::** volatile)()>::value); + CT_ASSERT(!is_substitution_failure_args<int (* const &)()>::value); + CT_ASSERT(!is_substitution_failure_args<int (foo::* &)()>::value); + CT_ASSERT(!is_substitution_failure_args<int (foo::* const)()>::value); + CT_ASSERT(!is_substitution_failure_args<int (foo::* const &)()>::value); + CT_ASSERT(!is_substitution_failure_args<int (foo::* volatile)()>::value); + auto lambda = [](){}; + CT_ASSERT(!is_substitution_failure_args<decltype(lambda)&>::value); + CT_ASSERT(is_substitution_failure_args<void>::value); +} + |