
On Mon, Mar 11, 2013 at 8:03 PM, Klaim - Joël Lamotte <mjklaim@gmail.com> wrote:
On Mon, Mar 11, 2013 at 4:19 PM, Andrey Semashev <andrey.semashev@gmail.com> wrote:
Could you send me a complete compilable code sample?
Yes, I just tried with the following code which is not as minimal as it could be (it the headers includes a lot other headers) but it generate the same error in an empty project (generated with CMake) Note that I upgraded to Boost Log V2 in the same time than Boost from v1.52 to v1.53. The problem seem related to Phoenix as stream is just a typedef if I understand the code correctly. I added the compilation error log in case the problem comes from something I've setup: http://pastebin.com/zHRwaBsQ
------
#include <boost/log/expressions/formatters.hpp> #include <boost/log/expressions/formatters/stream.hpp> #include <boost/log/sinks.hpp>
namespace logattr { const auto MODULE_NAME = "ModuleName"; const auto TIMESTAMP = "TimeStamp"; }
int main() {
namespace blog = boost::log; namespace expr = blog::expressions;
const auto FORMAT_MODULE_NAME = expr::attr< std::string >( logattr::MODULE_NAME ); const auto FORMAT_TIMESTAMP = expr::format_date_time<boost::posix_time::ptime>( logattr::TIMESTAMP, "%Y-%m-%d %H:%M:%S" ); const auto FORMAT_MESSAGE = expr::message;
const auto a = expr::stream << FORMAT_TIMESTAMP; // compiles const auto c = expr::stream << FORMAT_MODULE_NAME; // compiles const auto d = expr::stream << FORMAT_MESSAGE; // error: no operator "<<" matches these operand const auto e = expr::stream << "test"; // error: no operator "<<" matches these operand const auto f = expr::stream << std::string("test"); // error: no operator "<<" matches these operand
return 0; }
You also have to #include <boost/phoenix/operators.hpp> as Boost.Phoenix does not include its operator overloads by default. Or simply #include <boost/log/expressions.hpp> which takes care of that.