summaryrefslogtreecommitdiff
path: root/boost/spirit/home/x3/support/context.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/spirit/home/x3/support/context.hpp')
-rw-r--r--boost/spirit/home/x3/support/context.hpp46
1 files changed, 7 insertions, 39 deletions
diff --git a/boost/spirit/home/x3/support/context.hpp b/boost/spirit/home/x3/support/context.hpp
index 93bcb24070..592ce3ff76 100644
--- a/boost/spirit/home/x3/support/context.hpp
+++ b/boost/spirit/home/x3/support/context.hpp
@@ -8,10 +8,6 @@
#if !defined(BOOST_SPIRIT_X3_CONTEXT_JAN_4_2012_1215PM)
#define BOOST_SPIRIT_X3_CONTEXT_JAN_4_2012_1215PM
-#if defined(_MSC_VER)
-#pragma once
-#endif
-
#include <boost/spirit/home/x3/support/unused.hpp>
#include <boost/mpl/identity.hpp>
@@ -23,26 +19,13 @@ namespace boost { namespace spirit { namespace x3
context(T& val, Next const& next)
: val(val), next(next) {}
- template <typename ID_, typename Unused = void>
- struct get_result
- {
- typedef typename Next::template get_result<ID_>::type type;
- };
-
- template <typename Unused>
- struct get_result<mpl::identity<ID>, Unused>
- {
- typedef T& type;
- };
-
T& get(mpl::identity<ID>) const
{
return val;
}
template <typename ID_>
- typename Next::template get_result<ID_>::type
- get(ID_ id) const
+ decltype(auto) get(ID_ id) const
{
return next.get(id);
}
@@ -60,37 +43,22 @@ namespace boost { namespace spirit { namespace x3
context(T& val, unused_type)
: val(val) {}
- template <typename ID_, typename Unused = void>
- struct get_result
- {
- typedef unused_type type;
- };
-
- template <typename Unused>
- struct get_result<mpl::identity<ID>, Unused>
- {
- typedef T& type;
- };
-
T& get(mpl::identity<ID>) const
{
return val;
}
template <typename ID_>
- unused_type
- get(ID_) const
+ unused_type get(ID_) const
{
- return unused;
+ return {};
}
T& val;
};
template <typename Tag, typename Context>
- inline auto
- get(Context const& context)
- -> decltype(context.get(mpl::identity<Tag>()))
+ inline decltype(auto) get(Context const& context)
{
return context.get(mpl::identity<Tag>());
}
@@ -98,13 +66,13 @@ namespace boost { namespace spirit { namespace x3
template <typename ID, typename T, typename Next>
inline context<ID, T, Next> make_context(T& val, Next const& next)
{
- return context<ID, T, Next>(val, next);
+ return { val, next };
}
template <typename ID, typename T>
inline context<ID, T> make_context(T& val)
{
- return context<ID, T>(val);
+ return { val };
}
namespace detail
@@ -120,7 +88,7 @@ namespace boost { namespace spirit { namespace x3
inline context<ID, T, Next>
make_unique_context(T& val, Next const& next, unused_type)
{
- return context<ID, T, Next>(val, next);
+ return { val, next };
}
}