Compile Time Template restriction C++ -


basically have 4 classes:

  • overvoid
  • meta: inherits overvoid
  • physical: has nothing above
  • move: templated class

i want move's template accept objects of overvoid type i.e. overvoid , meta.

class overvoid{ public:      virtual ~overvoid(){     }; };  class meta: public overvoid{  };  class physical{ public: };  template<typename _ty> class move{  }; 

i want error trown @ compile time, know there way boost cannot use boost (dev issues company)

any ideas?

you can hide template definition classes not of type overvoid

template<typename _ty,           class = typename std::enable_if<std::is_base_of<overvoid, _ty>::value>::type> class move{  }; 

you error when attempting compile class of non-overvoid type.

int main() {    move<meta> a;   move<overvoid> b;   move<physical> c;   // code goes here   return 0; } 

error:

prog.cpp: in function 'int main()': prog.cpp:29:15: error: no type named 'type' in 'struct std::enable_if<false,    void>' move<physical> c; 

Comments

Popular posts from this blog

c++ - Difference between pre and post decrement in recursive function argument -

php - Nothing but 'run(); ' when browsing to my local project, how do I fix this? -

php - How can I echo out this array? -