
AMDG Andrey Semashev wrote:
On 03/24/2010 01:25 PM, Vladimir Prus wrote:
On Tuesday 16 March 2010 18:07:55 Andrey Semashev wrote:
On 03/16/2010 01:46 AM, Steven Watanabe wrote:
>> BOOST_LOG_ATTRIBUTE(logging::trivial::severity_level, severity); >> BOOST_LOG_ATTRIBUTE(unsigned int, line_id); > > I thought if that. It was not done for two reasons: > > 1. The macro would have to have a formatter in its arguments. Given > that the attribute definition should be exposed rather widely, this > additional dependency would be unwelcome.
Why is it necessary to pass a formatter to the macro?
In order to support your syntax:
fmt::stream << fmt::line_id() << ":<"<< fmt::severity() << "> "<< fmt::message()
Well, my assertion stays valid - the macro would expose formatters to all code that uses the attribute, and that is not desirable (especially in light of the expressed concerns about compilation times).
There was further discussion on porting filters and formatters to Boost.Proto. I can't tell if this would alleviate the problem, but if it appears that it is possible not to introduce that dependency or the dependency is ultra-light, then I will provide something like that.
Proto isn't needed. If attr returns a struct like template<class Types> struct attr_t { const char* name; }; Then the extra code needed to treat it as a formatter can be added by operator<< and operator%. These operators don't need to be defined in the same header In Christ, Steven Watanabe