Primary design goals:
- Arbitrary protocol specification
- No separation of specification information
- No duplication of specification information
Secondary design goals:
- Portability - code must compile on any C++11 compliant compiler; platform/library specific code must provide alternatives
- Code economy - trivial methods (operators, constructors, print methods, ...) should not require object-specific implementations
- Code efficiency - it should be possible to override the default behaviour of arbitrarily specific combinations of operators
- Zero overhead - the abstractions used here should introduce no intrinsic overhead over an equivalent operation on a raw C structure
Existing implementations:
- Boost.Serialization - fails primary goals 2 and 3, arguably fails 1
- Google Protocol Buffers - fails primary goal 1