
On Wed, Apr 2, 2008 at 7:16 PM, Eric Niebler <eric@boost-consulting.com> wrote:
Giovanni Piero Deretta wrote:
Anyways, I see that you take great care to guarantee static initialization of stateful function objects. Do you really think this is a case that is worth supporting? What are the use cases? (for example, did you use this functionality when implementing oven?).
It seems to me that it complicates a lot the interface of the library (with tons of ugly macros). I understand that this functionality is opt-in (i.e. it is there only if you want it), but I feel unconfortable. May be I'm worring too much, but I think that it really makes the docs hard to follow.
The ability to statically initialize global objects is pretty important. In the early days of xpressive, I got a bug report about a crash which was due to construction order of its global objects, which let to Proto's expressions-are-aggregates design. If an object must be a namespace scope -- and function objects must if they are to truly behave as regular functions -- I won't use them if they need dynamic initialization.
Of course I appreciate the general benefit of statically initialized function objects (i think you and David Abrahams showed me the trick used to even have them initialized in headers). I just wanted to know if there was generally necessary to have *stateful* function objects: when the simple syntax: my_function_type f = {}; isn't enough? I.e., when you actually need to put anything in those braces? I honestly do not know. I never had this necessity, but both you and Shunsuke have certainly worked with more complex function objects than I did. -- gpd