#pragma once template struct strict_index_magic_number_t { operator I() const { return N; } }; #define DEFINE_STRICT_INDEX_NUMBER(contained_type,name) \ typedef contained_type name #define DEFINE_STRICT_INDEX_CONSTANT_TYPE(name,tag,I) \ template \ struct name : public strict_index_magic_number_t {} #define DEFINE_STRICT_INDEX_CONSTANT_NUMBER(type,N,name) \ static const type name = {}