
David Abrahams wrote: I've gone back and looked at this again.
5. Archive Concept Requirements are specified in a completely new, unprecedented way. I can see why you want to write them this way, but the result is that it isn't completely clear which elements of the interface are required and which are optional.
The goal is to describe those functions that a class must implement to function in order to guarentee that it will compile and execute with any serializable type. If it fails to fullfill one or more requirements, it might work with some serializable type - but there is no guarentee that it will compile with all of them. Note that his concept is different than others in the standard library in that one of the requirements is that it be a class with certain required member functions. Most or all other concept definitions only specify operations for which the type is valid. As far as I know this doesn't include supporting specific member functions. The iterator library does require that an iterator be derived from a specific class and permit that functions be overloaded - its sort of similar to what we have here - but I couldn't see an exact match. For example,
there's a colon after the class name.
class iarchive : .. { }; is intended to illustrate that fact that an archive may be derived from somethng else but that this would be optional and that it is not a relevant feature of the archive concept. Perhaps the :... is confusing and should be removed.
Does the class need to be derived from something?
The concept requirements don't require or prohibit it. It would be considered a feature of a specific model on the concept. It didn't occur to me to be specific about this.
What about the names of function and member template parameters? I know the answer to that one, but a novice might not. Hmmm - the only template parameters are flagged as
template<class T> and the first sentence before they are used states "The template parameter T must correspond to a type which models the Serializable concept" and the link points to documentation on the Serializable concept. So, I don't think I understand the question. (Uh oh, maybe I'm a novice too! I often feel like here)
What about the default arguments to member functions? Is it okay to write overloads?
What about them? The concept describes necessary and sufficient conditions. It doesn't prohibit anyone adding there own parameters as long as they are optional so the concept interface is supported. I don't think I really understand this question. Robert Ramey