summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2012-12-23 13:16:26 (GMT)
committerRemko Tronçon <git@el-tramo.be>2012-12-23 14:43:26 (GMT)
commit491ddd570a752cf9bda85933bed0c6942e39b1f9 (patch)
tree10c25c1be8cc08d0497df1dccd56a10fbb30beee /3rdParty/Boost/src/boost/lambda/detail/select_functions.hpp
parentda7d7a0ca71b80281aa9ff2526290b61ccb0cc60 (diff)
downloadswift-491ddd570a752cf9bda85933bed0c6942e39b1f9.zip
swift-491ddd570a752cf9bda85933bed0c6942e39b1f9.tar.bz2
Update Boost to 1.52.0.
Change-Id: I1e56bea2600bf2ed9c5b3aba8c4f9d2a0f350e77
Diffstat (limited to '3rdParty/Boost/src/boost/lambda/detail/select_functions.hpp')
-rw-r--r--3rdParty/Boost/src/boost/lambda/detail/select_functions.hpp74
1 files changed, 74 insertions, 0 deletions
diff --git a/3rdParty/Boost/src/boost/lambda/detail/select_functions.hpp b/3rdParty/Boost/src/boost/lambda/detail/select_functions.hpp
new file mode 100644
index 0000000..956045c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/lambda/detail/select_functions.hpp
@@ -0,0 +1,74 @@
+// -- select_functions.hpp -- Boost Lambda Library --------------------------
+
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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)
+//
+// For more information, see http://www.boost.org
+
+
+#ifndef BOOST_LAMBDA_SELECT_FUNCTIONS_HPP
+#define BOOST_LAMBDA_SELECT_FUNCTIONS_HPP
+
+namespace boost {
+namespace lambda {
+namespace detail {
+
+
+// select functions -------------------------------
+template<class Any, CALL_TEMPLATE_ARGS>
+inline Any& select(Any& any, CALL_FORMAL_ARGS) { CALL_USE_ARGS; return any; }
+
+
+template<class Arg, CALL_TEMPLATE_ARGS>
+inline typename Arg::template sig<tuple<CALL_REFERENCE_TYPES> >::type
+select ( const lambda_functor<Arg>& op, CALL_FORMAL_ARGS ) {
+ return op.template call<
+ typename Arg::template sig<tuple<CALL_REFERENCE_TYPES> >::type
+ >(CALL_ACTUAL_ARGS);
+}
+template<class Arg, CALL_TEMPLATE_ARGS>
+inline typename Arg::template sig<tuple<CALL_REFERENCE_TYPES> >::type
+select ( lambda_functor<Arg>& op, CALL_FORMAL_ARGS) {
+ return op.template call<
+ typename Arg::template sig<tuple<CALL_REFERENCE_TYPES> >::type
+ >(CALL_ACTUAL_ARGS);
+}
+
+// ------------------------------------------------------------------------
+// select functions where the return type is explicitly given
+// Note: on many functions, this return type is just discarded.
+// The select functions are inside a class template, and the return type
+// is a class template argument.
+// The first implementation used function templates with an explicitly
+// specified template parameter.
+// However, this resulted in ambiguous calls (at least with gcc 2.95.2
+// and edg 2.44). Not sure whether the compilers were right or wrong.
+
+template<class RET> struct r_select {
+
+// Any == RET
+ template<class Any, CALL_TEMPLATE_ARGS>
+ static
+ inline RET go (Any& any, CALL_FORMAL_ARGS) { CALL_USE_ARGS; return any; }
+
+
+ template<class Arg, CALL_TEMPLATE_ARGS>
+ static
+ inline RET go (const lambda_functor<Arg>& op, CALL_FORMAL_ARGS ) {
+ return op.template call<RET>(CALL_ACTUAL_ARGS);
+ }
+ template<class Arg, CALL_TEMPLATE_ARGS>
+ static
+ inline RET go (lambda_functor<Arg>& op, CALL_FORMAL_ARGS ) {
+ return op.template call<RET>(CALL_ACTUAL_ARGS);
+ }
+};
+
+} // namespace detail
+} // namespace lambda
+} // namespace boost
+
+#endif