fork(2) download
  1. template <class DisplayType>
  2. class DisplayAdapter : public DisplayType
  3. {
  4.  
  5. };
  6.  
  7. template<template <typename> DisplayAdapter>
  8. class Painter // Takes an instance of DisplayAdapter, not a type!
  9. {
  10.  
  11. };
  12.  
  13. class S {};
  14.  
  15. int main()
  16. {
  17. DisplayAdapter<S> concreteAdapter;
  18. Painter<concreteAdapter> p;
  19.  
  20. return 0;
  21. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp:7:30: error: expected ‘class’ or ‘typename’ before ‘DisplayAdapter’
 template<template <typename> DisplayAdapter>
                              ^~~~~~~~~~~~~~
prog.cpp: In function ‘int main()’:
prog.cpp:18:13: error: the value of ‘concreteAdapter’ is not usable in a constant expression
     Painter<concreteAdapter> p;
             ^~~~~~~~~~~~~~~
prog.cpp:17:23: note: ‘concreteAdapter’ was not declared ‘constexpr’
     DisplayAdapter<S> concreteAdapter;
                       ^~~~~~~~~~~~~~~
prog.cpp:18:28: error: type/value mismatch at argument 1 in template parameter list for ‘template<template<class> class DisplayAdapter> class Painter’
     Painter<concreteAdapter> p;
                            ^
prog.cpp:18:28: note:   expected a class template, got ‘concreteAdapter’
stdout
Standard output is empty