/* 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 #include #include #include #include "test.hpp" #ifdef BOOST_CLBL_TRTS_GCC_OLDER_THAN_4_9_2 //gcc >= 4.8 doesn't like the invoke_case pattern used here int main(){} #else template struct tag { using type = T; }; template struct invoke_case { template void operator()(tag) const { CT_ASSERT((Expect == boost::callable_traits::is_invocable())); } }; template void run_tests() { using ignored = int[]; ignored x {(InvokeCases{}(tag{}),0)..., 0}; (void)x; } struct foo {}; int main() { run_tests ,invoke_case ,invoke_case ,invoke_case ,invoke_case> ,invoke_case ,invoke_case ,invoke_case ,invoke_case ,invoke_case> ,invoke_case ,invoke_case ,invoke_case ,invoke_case ,invoke_case, int> >(); run_tests ,invoke_case ,invoke_case ,invoke_case ,invoke_case> ,invoke_case ,invoke_case ,invoke_case ,invoke_case ,invoke_case> ,invoke_case ,invoke_case ,invoke_case ,invoke_case ,invoke_case, int> >(); run_tests ,invoke_case ,invoke_case ,invoke_case ,invoke_case> ,invoke_case ,invoke_case ,invoke_case ,invoke_case ,invoke_case> ,invoke_case ,invoke_case ,invoke_case ,invoke_case ,invoke_case, int> >(); run_tests ,invoke_case ,invoke_case ,invoke_case ,invoke_case> ,invoke_case ,invoke_case ,invoke_case ,invoke_case ,invoke_case> ,invoke_case ,invoke_case ,invoke_case ,invoke_case ,invoke_case, int> >(); // MSVC doesn't handle cv + ref qualifiers in expression sfinae correctly #ifndef BOOST_CLBL_TRTS_MSVC run_tests ,invoke_case ,invoke_case ,invoke_case ,invoke_case> ,invoke_case ,invoke_case ,invoke_case ,invoke_case ,invoke_case> ,invoke_case ,invoke_case ,invoke_case ,invoke_case ,invoke_case, int> >(); run_tests ,invoke_case ,invoke_case ,invoke_case ,invoke_case> ,invoke_case ,invoke_case ,invoke_case ,invoke_case ,invoke_case> ,invoke_case ,invoke_case ,invoke_case ,invoke_case ,invoke_case, int> >(); #endif // #ifndef BOOST_CLBL_TRTS_MSVC run_tests ,invoke_case ,invoke_case ,invoke_case ,invoke_case> ,invoke_case ,invoke_case ,invoke_case ,invoke_case ,invoke_case> ,invoke_case ,invoke_case ,invoke_case ,invoke_case ,invoke_case, int> >(); auto f = [](int){}; run_tests ,invoke_case ,invoke_case >(); run_tests ,invoke_case ,invoke_case >(); run_tests ,invoke_case ,invoke_case >(); run_tests ,invoke_case ,invoke_case >(); run_tests ,invoke_case ,invoke_case >(); run_tests ,invoke_case ,invoke_case >(); run_tests ,invoke_case ,invoke_case >(); run_tests ,invoke_case ,invoke_case >(); run_tests ,invoke_case ,invoke_case >(); run_tests ,invoke_case ,invoke_case >(); run_tests ,invoke_case ,invoke_case >(); run_tests ,invoke_case ,invoke_case >(); run_tests ,invoke_case ,invoke_case >(); run_tests ,invoke_case ,invoke_case ,invoke_case ,invoke_case> ,invoke_case ,invoke_case ,invoke_case ,invoke_case ,invoke_case> ,invoke_case ,invoke_case ,invoke_case ,invoke_case ,invoke_case, int> >(); run_tests ,invoke_case ,invoke_case ,invoke_case ,invoke_case> ,invoke_case ,invoke_case ,invoke_case ,invoke_case ,invoke_case> ,invoke_case ,invoke_case ,invoke_case ,invoke_case ,invoke_case, int> >(); run_tests ,invoke_case ,invoke_case ,invoke_case ,invoke_case> ,invoke_case ,invoke_case ,invoke_case ,invoke_case ,invoke_case> ,invoke_case ,invoke_case ,invoke_case ,invoke_case ,invoke_case, int> >(); } #endif //#ifdef BOOST_CLBL_TRTS_GCC_OLDER_THAN_4_9_2