fork(2) download
  1. template< class Vehicle > class ElectricEngine { };
  2. template< class Vehicle > class GasEngine { };
  3.  
  4. // Best way
  5. template< template<class> class Engine > class Car : public Engine<Car> { };
  6. template< template<class> class Engine > class Plane : public Engine<Plane> { };
  7.  
  8. // Redundant way
  9. class ElectricCarEngine : public ElectricEngine<ElectricCarEngine> {};
  10. class GasCarEngine : public GasEngine<GasCarEngine> {};
  11. class ElectricPlaneEngine : public ElectricEngine<ElectricPlaneEngine> {};
  12. class GasPlaneEngine : public GasEngine<GasPlaneEngine> {};
  13.  
  14. // This does not compile
  15. // template <typename Base>
  16. // class CarEngineInterface : public Base<CarEngineInterface<Base> > {};
  17.  
  18. int main(int argc, char **argv) {
  19.  
  20. Car<ElectricEngine> myTesla;
  21. Plane<GasEngine> myMooney;
  22.  
  23.  
  24. ElectricCarEngine ec;
  25.  
  26.  
  27. return 0;
  28. }
Compilation error #stdin compilation error #stdout 0s 3336KB
stdin
Standard input is empty
compilation info
prog.cpp:5:73: error: type/value mismatch at argument 1 in template parameter list for ‘template<class> class Engine’
 template< template<class> class Engine > class Car   : public Engine<Car>   { };
                                                                         ^
prog.cpp:5:73: error:   expected a type, got ‘Car’
prog.cpp:6:75: error: type/value mismatch at argument 1 in template parameter list for ‘template<class> class Engine’
 template< template<class> class Engine > class Plane : public Engine<Plane> { };
                                                                           ^
prog.cpp:6:75: error:   expected a type, got ‘Plane’
prog.cpp: In function ‘int main(int, char**)’:
prog.cpp:20:22: warning: unused variable ‘myTesla’ [-Wunused-variable]
  Car<ElectricEngine> myTesla;
                      ^
prog.cpp:21:22: warning: unused variable ‘myMooney’ [-Wunused-variable]
  Plane<GasEngine>    myMooney;
                      ^
prog.cpp:24:20: warning: unused variable ‘ec’ [-Wunused-variable]
  ElectricCarEngine ec;
                    ^
stdout
Standard output is empty