#include <string>
#include <map>
#include <set>
#include <initializer_list>

using namespace std;

class A
{
public:
    struct pair_type    // or use std::pair
    {
        long val;
        std::string desc;
    };

    A(initializer_list<A::pair_type>);

private:
    map<long, string> _valueMap;
    map<string, long> _descriptionMap;
    set<string> _descriptions;
    set<long> _values;
};

A::A(initializer_list<A::pair_type> l)
{
    for (auto & elem : l)
    {
        _valueMap.emplace(elem.val, elem.desc);
        _descriptionMap.emplace(elem.desc, elem.val);
        _descriptions.emplace(elem.desc);
        _values.emplace(elem.val);
    }
}


class B
{
    enum { abbreviation, name, number, numberOfNameOptions };

public:
    static A& getType();
};

A& B::getType()
{
    static A a =
    {
        { abbreviation, "abbreviation" },
        { name, "name" },
        { number, "number" },
        { numberOfNameOptions, "numberOfNameOptions" }
    };

    return a;
}

int main()
{
	B b ;
	A a = b.getType() ;
}
