Domanda

I am trying to create a lazy function from a template function following the Boost::phoenix documentation. The code looks like this

#include <iostream>

#include <boost/phoenix/core.hpp>
#include <boost/phoenix/function.hpp>
#include <boost/phoenix/operator.hpp>
#include <boost/phoenix/statement.hpp>
#include <boost/phoenix/object.hpp>
#include <boost/phoenix/function/adapt_function.hpp>
#include <boost/phoenix/core/argument.hpp>

using namespace boost;
using namespace boost::phoenix;

namespace demo
{
     bool func(double a,double b)
     {
         return bool(a > b);
     }
}

BOOST_PHOENIX_ADAPT_FUNCTION( bool , func , demo::func , 2)

int main(int argc,char **argv)
{
     namespace pl = boost::phoenix::placeholders;
     auto comperator = func(pl::arg1,pl::arg2);
     std::cout<<comperator(1.2,12.4)<<std::endl;
     std::cout<<comperator(0.5,0.1)<<std::endl;
}

This is virtually one of the examples from the BOOST documentation. Storing this file as mk_lazy1.cpp and try to compile gives

$ g++ -omk_lazy1 mk_lazy1.cpp                 
mk_lazy1.cpp:26:1: error: template argument 1 is invalid      
mk_lazy1.cpp:26:1: error: expected identifier before ‘::’ token  
mk_lazy1.cpp:26:1: error: expected initializer before ‘const’ 
mk_lazy1.cpp: In function ‘int main(int, char**)’:
mk_lazy1.cpp:31:10: error: ‘comperator’ does not name a type    
mk_lazy1.cpp:32:35: error: ‘comperator’ was not declared in this scope   

I use gcc-4.7 on a Debian testing system. An honestly I am a bit lost as I have absolutely no idea what is wrong here (as I said, this is virtually a word by word copy of one of the examples provided by the Boost documentation).

Does anyone have a good idea?

È stato utile?

Soluzione

Remove using namespaces and all will work fine. Or write using namespaces AFTER adapt macro and all will work fine too. Or put macro into unnamed namespace.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top