summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/callable_traits/example/intro.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/callable_traits/example/intro.cpp')
-rw-r--r--src/boost/libs/callable_traits/example/intro.cpp62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/boost/libs/callable_traits/example/intro.cpp b/src/boost/libs/callable_traits/example/intro.cpp
new file mode 100644
index 000000000..a1e05096d
--- /dev/null
+++ b/src/boost/libs/callable_traits/example/intro.cpp
@@ -0,0 +1,62 @@
+/*<-
+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/detail/config.hpp>
+#ifdef BOOST_CLBL_TRTS_DISABLE_VARIABLE_TEMPLATES
+int main(){ return 0; }
+#else
+
+//[ intro
+#include <type_traits>
+#include <tuple>
+#include <boost/callable_traits.hpp>
+
+namespace ct = boost::callable_traits;
+
+// This function template helps keep our example code neat
+template<typename A, typename B>
+void assert_same(){ static_assert(std::is_same<A, B>::value, ""); }
+
+// foo is a function object
+struct foo {
+ void operator()(int, char, float) const {}
+};
+
+int main() {
+
+ // Use args_t to retrieve a parameter list as a std::tuple:
+ assert_same<
+ ct::args_t<foo>,
+ std::tuple<int, char, float>
+ >();
+
+ // has_void_return lets us perform a quick check for a void return type
+ static_assert(ct::has_void_return<foo>::value, "");
+
+ // Detect C-style variadics (ellipses) in a signature (e.g. printf)
+ static_assert(!ct::has_varargs<foo>::value, "");
+
+ // pmf is a pointer-to-member function: void (foo::*)(int, char, float) const
+ using pmf = decltype(&foo::operator());
+
+ // remove_member_const_t lets you remove the const member qualifier
+ assert_same<
+ ct::remove_member_const_t<pmf>,
+ void (foo::*)(int, char, float) /*no const!*/
+ >();
+
+ // Conversely, add_member_const_t adds a const member qualifier
+ assert_same<
+ pmf,
+ ct::add_member_const_t<void (foo::*)(int, char, float)>
+ >();
+
+ // is_const_member_v checks for the presence of member const
+ static_assert(ct::is_const_member<pmf>::value, "");
+}
+
+//]
+#endif