fork download
  1. #include <memory>
  2.  
  3. template <typename Op, typename T>
  4. struct base { };
  5.  
  6. template <typename Mode, typename T>
  7. struct derived { };
  8.  
  9. template <typename T>
  10. struct derived<int, T> : public base<int, T> { };
  11.  
  12. template <typename D, typename T>
  13. void fun(std::unique_ptr<base<D, T>>) { }
  14.  
  15. int main() {
  16. auto d = std::make_unique<derived<int, double>>();
  17. fun(std::move(d));
  18. }
Compilation error #stdin compilation error #stdout 0s 3092KB
stdin
Standard input is empty
compilation info
prog.cpp: In function 'int main()':
prog.cpp:17:18: error: no matching function for call to 'fun(std::remove_reference<std::unique_ptr<derived<int, double>, std::default_delete<derived<int, double> > >&>::type)'
  fun(std::move(d));
                  ^
prog.cpp:17:18: note: candidate is:
prog.cpp:13:6: note: template<class D, class T> void fun(std::unique_ptr<base<D, T> >)
 void fun(std::unique_ptr<base<D, T>>) { }
      ^
prog.cpp:13:6: note:   template argument deduction/substitution failed:
prog.cpp:17:18: note:   mismatched types 'base<D, T>' and 'derived<int, double>'
  fun(std::move(d));
                  ^
prog.cpp:17:18: note:   'std::unique_ptr<derived<int, double>, std::default_delete<derived<int, double> > >' is not derived from 'std::unique_ptr<base<D, T> >'
stdout
Standard output is empty