deba@1036: #include deba@1036: deba@1036: using namespace std; deba@1036: deba@1210: #include deba@1036: deba@1267: using namespace lemon; deba@1210: /* deba@1036: struct _EmptyList { deba@1036: void write() const {} deba@1036: }; deba@1036: deba@1036: template deba@1036: struct _AddNode { deba@1036: typedef _Next Next; deba@1036: typedef _Item Item; deba@1036: deba@1036: const Item item; deba@1036: const Next& next; deba@1036: deba@1036: _AddNode(const Item& _item, const Next& _next) deba@1036: : item(_item), next(_next) {} deba@1036: deba@1036: void write() const { deba@1036: next.write(); deba@1036: cout << item << ' '; deba@1036: } deba@1036: }; deba@1036: deba@1036: template deba@1036: struct _Writer { deba@1036: typedef _List List; deba@1036: deba@1036: const List list; deba@1036: deba@1036: _Writer(const List& _list = List()) : list(_list) {} deba@1036: deba@1036: deba@1036: template _Writer<_AddNode > add(Item item) const { deba@1036: return _Writer<_AddNode >(_AddNode(item, list)); deba@1036: } deba@1036: deba@1036: void write() const { deba@1036: list.write(); deba@1036: cout << endl; deba@1036: } deba@1036: }; deba@1036: deba@1036: deba@1036: typedef _Writer<> Writer; deba@1036: deba@1036: int main() { deba@1036: Writer().add(3).add("alpha").add(4.53).write(); deba@1036: } deba@1210: */ deba@1210: deba@1210: class A { deba@1210: public: deba@1210: typedef int X; deba@1267: typedef True XD; deba@1210: }; deba@1210: deba@1210: class C { deba@1210: }; deba@1210: deba@1267: deba@1267: template deba@1267: class B { deba@1267: public: deba@1267: static const bool state = false; deba@1267: }; deba@1267: deba@1267: template deba@1267: class B<_A, typename enable_if::type> { deba@1210: public: deba@1210: static const bool state = true; deba@1210: }; deba@1210: deba@1210: deba@1210: int main() { deba@1267: printf("%s\n", B::state ? "true" : "false"); deba@1267: printf("%s\n", B::state ? "true" : "false"); deba@1210: return 0; deba@1210: }