enum DeviceState{ ON , OFF , BUSY , WAITING };
template<typename T>
struct Foo
{
typedef DeviceState State;
template<State S>
void func();
};
template<typename T>
template<typename Foo<T>::State>
void Foo<T>::func()
{
}
struct Bar{};
int main()
{
Foo<Bar> f;
f.func<ON>();
}
CmVudW0gRGV2aWNlU3RhdGV7IE9OICwgT0ZGICwgQlVTWSAsIFdBSVRJTkcgfTsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnN0cnVjdCBGb28KewoJdHlwZWRlZiBEZXZpY2VTdGF0ZSBTdGF0ZTsKCQoJdGVtcGxhdGU8U3RhdGUgUz4KCXZvaWQgZnVuYygpOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KdGVtcGxhdGU8dHlwZW5hbWUgRm9vPFQ+OjpTdGF0ZT4Kdm9pZCBGb288VD46OmZ1bmMoKQp7Cn0KCnN0cnVjdCBCYXJ7fTsKCmludCBtYWluKCkKewoJRm9vPEJhcj4gZjsKCWYuZnVuYzxPTj4oKTsKfQo=