Dear all,
Trying to mimic what comes in the Lazy Vector example
http://www.boost.org/doc/libs/1_45_0/doc/html/proto/users_guide.html#boost_proto.users_guide.examples
I get a strange error speaking about result_of and the like. My guess is that there is some specialisation of a function object which does do the job for std::vector<> that I need to also specialise for my class. I can't find any track of that thing though. And, I might be totally wrong too...
Anyway, for your reference, I have put the code as well as the error message that I get in GCC 4.5.1, MinGW, WinXP, SP3 in the PS section of this posting. Any ideas please?
TIA, --Hossein
<Code>
#include <iostream>
#include
<boost/proto/proto.hpp>
namespace mpl = boost::mpl; namespace proto = boost::proto; using proto::_;
struct EWBase {}; typedef proto::terminal<double (*) (double)> FunctionType;
struct EmtGrammar: proto::or_ < proto::terminal<EWBase>, proto::shift_right<EmtGrammar, FunctionType> > {};
struct EmtDomain;
template<typename Expr> struct EmtExpr : proto::extends<Expr, EmtExpr<Expr>, EmtDomain> { typedef proto::extends<Expr, EmtExpr<Expr>, EmtDomain> base_type;
EmtExpr( Expr const & expr = Expr() ) : base_type( expr ) {} };
template< typename T > struct Emt : EmtExpr<typename proto::terminal<EWBase>::type> { typedef typename proto::terminal<EWBase>::type expr_type;
Emt(): EmtExpr<expr_type>(expr_type::make(EWBase()))
{} };
struct EmtDomain : proto::domain<proto::generator<EmtExpr>, EmtGrammar> {};
int main() { return 0; }
</Code>
<Error Message>
-------------- Build: Debug in ProtoGame2 ---------------
Compiling: main.cpp In file included from D:\Sources\Boost\boost_1_42_0/boost/proto/traits.hpp:34:0, from D:\Sources\Boost\boost_1_42_0/boost/proto/expr.hpp:27, from D:\Sources\Boost\boost_1_42_0/boost/proto/core.hpp:17, from D:\Sources\Boost\boost_1_42_0/boost/proto/proto.hpp:12, from D:\My Documents\My Programmes\Tutorial\Proto\ProtoGame2\main.cpp:3: D:\Sources\Boost\boost_1_42_0/boost/utility/result_of.hpp: In instantiation of 'boost::detail::result_of_nested_result<EmtDomain, EmtDomain(boost::proto::exprns_::expr<boost::proto::tag::function,
boost::proto::argsns_::list1<const EmtExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<EWBase>, 0l> >&>, 1l>)>': D:\Sources\Boost\boost_1_42_0/boost/utility/result_of.hpp:75:1: instantiated from 'boost::detail::result_of_impl<EmtDomain, EmtDomain(boost::proto::exprns_::expr<boost::proto::tag::function, boost::proto::argsns_::list1<const EmtExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<EWBase>, 0l> >&>, 1l>), false>' D:\Sources\Boost\boost_1_42_0/boost/utility/detail/result_of_iterate.hpp:24:109: instantiated from 'boost::result_of<EmtDomain(boost::proto::exprns_::expr<boost::proto::tag::function, boost::proto::argsns_::list1<const EmtExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<EWBase>, 0l> >&>,
1l>)>' D:\Sources\Boost\boost_1_42_0/boost/preprocessor/iteration/detail/local.hpp:34:1: instantiated from 'boost::proto::exprns_::extends<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<EWBase>, 0l>, EmtExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<EWBase>, 0l> >, EmtDomain, 0l>' D:\My Documents\My Programmes\Tutorial\Proto\ProtoGame2\main.cpp:25:1: instantiated from 'EmtExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<EWBase>, 0l> >' D:\My Documents\My Programmes\Tutorial\Proto\ProtoGame2\main.cpp:36:1: instantiated from here D:\Sources\Boost\boost_1_42_0/boost/utility/result_of.hpp:68:1: error: invalid use of incomplete type 'struct EmtDomain' D:\My Documents\My Programmes\Tutorial\Proto\ProtoGame2\main.cpp:20:8: error: forward declaration of 'struct
EmtDomain' In file included from D:\Sources\Boost\boost_1_42_0/boost/proto/extends.hpp:533:0, from D:\Sources\Boost\boost_1_42_0/boost/proto/core.hpp:23, from D:\Sources\Boost\boost_1_42_0/boost/proto/proto.hpp:12, from D:\My Documents\My Programmes\Tutorial\Proto\ProtoGame2\main.cpp:3: D:\Sources\Boost\boost_1_42_0/boost/preprocessor/iteration/detail/local.hpp: In instantiation of 'boost::proto::exprns_::extends<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<EWBase>, 0l>, EmtExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<EWBase>, 0l> >, EmtDomain, 0l>': D:\My Documents\My Programmes\Tutorial\Proto\ProtoGame2\main.cpp:25:1: instantiated from 'EmtExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<EWBase>, 0l>
>' D:\My Documents\My Programmes\Tutorial\Proto\ProtoGame2\main.cpp:36:1: instantiated from here D:\Sources\Boost\boost_1_42_0/boost/preprocessor/iteration/detail/local.hpp:34:1: error: no type named 'type' in 'struct boost::result_of<EmtDomain(boost::proto::exprns_::expr<boost::proto::tag::function, boost::proto::argsns_::list1<const EmtExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<EWBase>, 0l> >&>, 1l>)>' In file included from D:\Sources\Boost\boost_1_42_0/boost/proto/traits.hpp:34:0, from D:\Sources\Boost\boost_1_42_0/boost/proto/expr.hpp:27, from D:\Sources\Boost\boost_1_42_0/boost/proto/core.hpp:17, from D:\Sources\Boost\boost_1_42_0/boost/proto/proto.hpp:12, from D:\My Documents\My
Programmes\Tutorial\Proto\ProtoGame2\main.cpp:3: D:\Sources\Boost\boost_1_42_0/boost/utility/result_of.hpp: In instantiation of 'boost::detail::result_of_nested_result<EmtDomain, EmtDomain(boost::proto::exprns_::expr<boost::proto::tag::function, boost::proto::argsns_::list1<EmtExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<EWBase>, 0l> >&>, 1l>)>': D:\Sources\Boost\boost_1_42_0/boost/utility/result_of.hpp:75:1: instantiated from 'boost::detail::result_of_impl<EmtDomain, EmtDomain(boost::proto::exprns_::expr<boost::proto::tag::function, boost::proto::argsns_::list1<EmtExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<EWBase>, 0l> >&>, 1l>), false>' D:\Sources\Boost\boost_1_42_0/boost/utility/detail/result_of_iterate.hpp:24:109: instantiated from
'boost::result_of<EmtDomain(boost::proto::exprns_::expr<boost::proto::tag::function, boost::proto::argsns_::list1<EmtExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<EWBase>, 0l> >&>, 1l>)>' D:\Sources\Boost\boost_1_42_0/boost/preprocessor/iteration/detail/local.hpp:34:1: instantiated from 'boost::proto::exprns_::extends<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<EWBase>, 0l>, EmtExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<EWBase>, 0l> >, EmtDomain, 0l>' D:\My Documents\My Programmes\Tutorial\Proto\ProtoGame2\main.cpp:25:1: instantiated from 'EmtExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<EWBase>, 0l> >' D:\My Documents\My Programmes\Tutorial\Proto\ProtoGame2\main.cpp:36:1:
instantiated from here D:\Sources\Boost\boost_1_42_0/boost/utility/result_of.hpp:68:1: error: invalid use of incomplete type 'struct EmtDomain' D:\My Documents\My Programmes\Tutorial\Proto\ProtoGame2\main.cpp:20:8: error: forward declaration of 'struct EmtDomain' In file included from D:\Sources\Boost\boost_1_42_0/boost/proto/extends.hpp:533:0, from D:\Sources\Boost\boost_1_42_0/boost/proto/core.hpp:23, from D:\Sources\Boost\boost_1_42_0/boost/proto/proto.hpp:12, from D:\My Documents\My Programmes\Tutorial\Proto\ProtoGame2\main.cpp:3: D:\Sources\Boost\boost_1_42_0/boost/preprocessor/iteration/detail/local.hpp: In instantiation of 'boost::proto::exprns_::extends<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<EWBase>, 0l>, EmtExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal,
boost::proto::argsns_::term<EWBase>, 0l> >, EmtDomain, 0l>': D:\My Documents\My Programmes\Tutorial\Proto\ProtoGame2\main.cpp:25:1: instantiated from 'EmtExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<EWBase>, 0l> >' D:\My Documents\My Programmes\Tutorial\Proto\ProtoGame2\main.cpp:36:1: instantiated from here D:\Sources\Boost\boost_1_42_0/boost/preprocessor/iteration/detail/local.hpp:34:1: error: no type named 'type' in 'struct boost::result_of<EmtDomain(boost::proto::exprns_::expr<boost::proto::tag::function, boost::proto::argsns_::list1<EmtExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<EWBase>, 0l> >&>, 1l>)>' Process terminated with status 1 (0 minutes, 2 seconds) 6 errors, 0 warnings </Error Message>
|