summaryrefslogtreecommitdiff
path: root/boost/variant/detail/has_result_type.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/variant/detail/has_result_type.hpp')
-rw-r--r--boost/variant/detail/has_result_type.hpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/boost/variant/detail/has_result_type.hpp b/boost/variant/detail/has_result_type.hpp
new file mode 100644
index 0000000000..d3a78b1937
--- /dev/null
+++ b/boost/variant/detail/has_result_type.hpp
@@ -0,0 +1,36 @@
+//-----------------------------------------------------------------------------
+// boost variant/detail/has_result_type.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2014 Antony Polukhin
+//
+// 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)
+
+#ifndef BOOST_VARIANT_DETAIL_HAS_RESULT_TYPE_HPP
+#define BOOST_VARIANT_DETAIL_HAS_RESULT_TYPE_HPP
+
+#include "boost/config.hpp"
+
+
+namespace boost { namespace detail { namespace variant {
+
+template <typename T >
+struct has_result_type {
+private:
+ typedef char yes;
+ typedef struct { char array[2]; } no;
+
+ template<typename C> static yes test(typename C::result_type*);
+ template<typename C> static no test(...);
+
+public:
+ BOOST_STATIC_CONSTANT(bool, value = sizeof(test<T>(0)) == sizeof(yes));
+};
+
+}}} // namespace boost::detail::variant
+
+#endif // BOOST_VARIANT_DETAIL_HAS_RESULT_TYPE_HPP
+