Containers have a few properties in common that can simplify the passing of or the development of methods that use generic containers. Rather than having a suite of overloaded functions, a simple template argument with a concept check will suffice for all variants.


Include the following at the top of any translation unit for which you are running compile time checks on your blueprint classes.

Since it only uses macros and templatised objects, no linking is required for just this feature.

Concept Definition

Classes passing the ContainerConcept must satisfy:

Dynamic Containers

Classes passing the DynamicContainerConcept must additionally satisfy:

Byte Containers

In addition, if it is testing for a byte container, then it will do a check on the value type in the container and fail if it is not a char (uses a trick via specialisations and private constructors to ensure a compile time failure).


Use with the compile time concept check whenever you wish to check for a container template class.

    template<typename T>
    void f(const T& container) {
        unsigned int size = container.size();
    template<typename T>
    void g(const T& byte_container) {
        unsigned int size = container.size();
        char c = container[0];

Author(s): Daniel Stonier (
autogenerated on Thu Jan 2 2014 11:12:03