template <typename Enum, E Value> struct Foo {};
enum X { A, B };
enum Y { C, D };
Foo<X, A> foo1;
Foo<Y, D> foo2;
При создании значений foo1 и foo2 шаблон необходимо параметризовать и типом enum и значением, что очевидно избыточно, так как значение уже связано с конкретным типом. Как сократить запись до:
Foo<A> foo1;
Foo<D> foo2;
Решения из C++11 приветствуются.