1 #ifndef BOOST_METAPARSE_V1_EXCEPT_HPP
2 #define BOOST_METAPARSE_V1_EXCEPT_HPP
3 
4 // Copyright Abel Sinkovics (abel@sinkovics.hu)  2009 - 2011.
5 // Distributed under the Boost Software License, Version 1.0.
6 //    (See accompanying file LICENSE_1_0.txt or copy at
7 //          http://www.boost.org/LICENSE_1_0.txt)
8 
9 #include <boost/metaparse/v1/is_error.hpp>
10 #include <boost/metaparse/v1/accept.hpp>
11 #include <boost/metaparse/v1/reject.hpp>
12 
13 #include <boost/mpl/if.hpp>
14 
15 namespace boost
16 {
17   namespace metaparse
18   {
19     namespace v1
20     {
21       template <class P, class Result, class ErrorMsg>
22       struct except
23       {
24         typedef except type;
25 
26         template <class S, class Pos>
27         struct apply :
28           boost::mpl::if_<
29             is_error<typename P::template apply<S, Pos> >,
30             accept<Result, S, Pos>,
31             reject<ErrorMsg, Pos>
32           >
33         {};
34       };
35     }
36   }
37 }
38 
39 #endif
40 
41