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