Daniel Oberhoff wrote:
I've experimented with a variadic Proto. It's not without its problems. <snip> ah, ok, bummer. A friend of mine recently mused if it wasn't time for a new language. not like python, more like D. Not that I particularly like D (well, I don't really know it either), just that it seems people have taken c++ to it's limits, and c++0x can't really help totally, because it is an incremental change (even though auto will be great I think, as will variadic function templates and move semantics). I opposed him at
Eric Niebler wrote: the time, but seeing how much black magic goes into ETs (or DSELs in general), he might be right after all.
If programming language evolution stopped at C++, I would be shocked and disappointed. That said, I don't think C++ has been taken to its limits. I'm curious to see what the next generation of C++ programmers will do with new features like concepts, variadics and rvalue references. If you're sweating the black magic that goes into building a DSELs, then I suggest you don't think so hard about how the sausage is made. ;-)
I've filed bugs against msvc for its mishandling of nested function types. In the mean time, please continue using callable transforms if you like them. You can always wrap them in proto::call<> (or, for object transforms, proto::make<>) to keep msvc happy, if that's a compiler you care about.
Ok, that isn't the worst of solutions, if I end up needing msvc (which may actually be the case soon, as we may be required to write plugins for windows programs with this stuff...).
You can get pretty far with preprocessor hacks to hide the msvc workarounds. Here's something to get your gears turning: #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500)) #define _value(x) callproto::_value(x) #endif Now, if proto::_value(proto::_left) shows up in your grammar, it gets turned into proto::callproto::_value(proto::_left). I use this trick a lot.
Thanks again for taking the time and giving something like proto to the community.
My pleasure. I'm glad to see folks starting to use it. -- Eric Niebler BoostPro Computing http://www.boostpro.com