fork download
  1. #include <type_traits>
  2. #include <list>
  3. #include <string>
  4.  
  5. template <typename T, typename C>
  6. class tl2;
  7.  
  8. template <typename D, typename T>
  9. class tl1
  10. {
  11. private:
  12. std::list<T> mTs;
  13. tl1()
  14. {
  15. static_assert(std::is_base_of<tl2<T, D>, T>::value,
  16. "T should inherit from tl2");
  17. }
  18. friend D;
  19.  
  20. public:
  21. T& getTbyName() const;
  22. };
  23.  
  24. template <typename T, typename C>
  25. class tl2
  26. {
  27. public:
  28. tl2()
  29. {
  30. static_assert(std::is_base_of<tl1<C, T>, C>::value,
  31. "C should inherit from tl1");
  32. }
  33.  
  34. std::string getName()
  35. {
  36. return mName;
  37. }
  38.  
  39. private:
  40. std::string mName;
  41. };
  42.  
  43. class cl1;
  44.  
  45. class cl2 : public tl2<cl2, cl1>
  46. {
  47. cl2(){}
  48. };
  49. class cl1 : public tl1<cl1, cl2>
  50. {
  51. cl1(){}
  52. };
  53.  
  54. int main()
  55. {
  56. }
  57.  
Success #stdin #stdout 0s 3456KB
stdin
Standard input is empty
stdout
Standard output is empty