
Can you clarify this? This sounds like something which could be policy driven via a template parameter rather than specified globally via a macro, but I'm not really sure what you're referring to.
To clarify things a bit: Voronoi diagram data structure contains three arrays of: Voronoi vertices, Voronoi edges, Voronoi cells: http://svn.boost.org/svn/boost/trunk/boost/polygon/voronoi_diagram.hpp. All thee data structures that represent vertex/edge/cell are interconnected via pointers to each other. Apart from topology information it's usually useful to be able to associate some information with the primitive (vertex/edge/cell). At the moment this is implemented via mutable void pointer, thus simplifying template interface for the above data structures. As discussed previously on this list, such a pointer adds additional memory overhead in case user is not associating any data with Voronoi primitives. That's why I added compile time directives to disable data field at compile time. Making this data field as a template parameter, would add additional complexity to those data structures. Also it would imply circular dependency as each of the Voronoi structures needs to know the type of the others two (and they could have different type of data associated with them). Plus it wouldn't solve the issue with memory overhead if this member is not required. Those are the reasons I consider the mutable void* data member enclosed into precompiler directives to be a better design. Andrii