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_p...
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
namespace mpl = boost::mpl;
namespace proto = boost::proto;
using proto::_;
struct EWBase {};
typedef proto::terminal FunctionType;
struct EmtGrammar:
proto::or_
<
proto::terminal<EWBase>,
proto::shift_right
{};
struct EmtDomain;
template<typename Expr>
struct EmtExpr
: proto::extends
{
typedef proto::extends base_type;
EmtExpr( Expr const & expr = Expr() )
: base_type( expr )
{}
};
template< typename T >
struct Emt
: EmtExpr
{
typedef typename proto::terminal<EWBase>::type expr_type;
Emt(): EmtExpr(expr_type::make(EWBase())) {}
};
struct EmtDomain
: proto::domain
{};
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 >&>, 1l>)>':
D:\Sources\Boost\boost_1_42_0/boost/utility/result_of.hpp:75:1: instantiated from 'boost::detail::result_of_impl >&>, 1l>), false>'
D:\Sources\Boost\boost_1_42_0/boost/utility/detail/result_of_iterate.hpp:24:109: instantiated from 'boost::result_of >&>, 1l>)>'
D:\Sources\Boost\boost_1_42_0/boost/preprocessor/iteration/detail/local.hpp:34:1: instantiated from 'boost::proto::exprns_::extends, EmtExpr >, EmtDomain, 0l>'
D:\My Documents\My Programmes\Tutorial\Proto\ProtoGame2\main.cpp:25:1: instantiated from 'EmtExpr >'
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, EmtExpr >, EmtDomain, 0l>':
D:\My Documents\My Programmes\Tutorial\Proto\ProtoGame2\main.cpp:25:1: instantiated from 'EmtExpr >'
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 >&>, 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 >&>, 1l>)>':
D:\Sources\Boost\boost_1_42_0/boost/utility/result_of.hpp:75:1: instantiated from 'boost::detail::result_of_impl >&>, 1l>), false>'
D:\Sources\Boost\boost_1_42_0/boost/utility/detail/result_of_iterate.hpp:24:109: instantiated from 'boost::result_of >&>, 1l>)>'
D:\Sources\Boost\boost_1_42_0/boost/preprocessor/iteration/detail/local.hpp:34:1: instantiated from 'boost::proto::exprns_::extends, EmtExpr >, EmtDomain, 0l>'
D:\My Documents\My Programmes\Tutorial\Proto\ProtoGame2\main.cpp:25:1: instantiated from 'EmtExpr >'
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, EmtExpr >, EmtDomain, 0l>':
D:\My Documents\My Programmes\Tutorial\Proto\ProtoGame2\main.cpp:25:1: instantiated from 'EmtExpr >'
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 >&>, 1l>)>'
Process terminated with status 1 (0 minutes, 2 seconds)
6 errors, 0 warnings