problem in returning mpl::list

Hi I am trying to write a meta-function class, receiving a list as argument and returning the reduced list by poping one element from the front. Here is my code struct Poplist { template<class seq> struct apply { typedef pop_front<seq>::type res; static const int value = size<seq>::value; }; }; int main() { typedef list_c<int,0,1,2,3,4,5> numbers; cout<<Poplist::apply<numbers>::value<<endl; } And I got the following error example.cpp:20: error: type ‘boost::mpl::pop_front<seq>’ is not derived from type ‘Poplist::apply<seq>’ example.cpp:20: error: expected ‘;’ before ‘res’ Can someone please rectify my code Thanks in advance

2008/7/27 noman javed <noman_bwp@yahoo.com>:
struct Poplist { template<class seq> struct apply { typedef pop_front<seq>::type res; static const int value = size<seq>::value; }; };
for starts, you need to use typename here: typedef typename pop_front<seq>::type res; Stjepan

Stjepan Rajko wrote:
2008/7/27 noman javed <noman_bwp@yahoo.com>:
struct Poplist { template<class seq> struct apply { typedef pop_front<seq>::type res; static const int value = size<seq>::value; }; };
for starts, you need to use typename here:
typedef typename pop_front<seq>::type res;
Also, apply does not have a 'type' member typedef, so I think it is not a metafunction. What about (untested) namespace mpl = ::boost::mpl; struct Poplist : mpl::lambda<mpl::pop_front<mpl::placeholders::_1> >::type {} or (untested) struct poplist{ template<class Seq> struct apply : mpl::pop_front<Seq> {}; }; I think section 3.2 of Abraham's 'C++ Template Metaprogramming' book has some examples. --John
participants (3)
-
John C. Femiani
-
noman javed
-
Stjepan Rajko