Guest User

Untitled

a guest
Oct 21st, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.73 KB | None | 0 0
  1. template<typename T>
  2. struct A {
  3. using ARet = T;
  4.  
  5. virtual ~A() = default;
  6.  
  7. ARet foo();
  8. virtual ARet bar() = 0;
  9. };
  10.  
  11. template<typename T>
  12. T A<T>::foo() { // OK, return type matches that in the declaration (T = ARet)
  13. return 42;
  14. }
  15.  
  16. template<typename T>
  17. struct B : A<T> {
  18. using BaseType = A<T>;
  19. using BRet = typename BaseType::ARet;
  20.  
  21. BRet bar() override;
  22. };
  23.  
  24. template<typename T>
  25. T B<T>::bar() { // Error, return type differs from that in the declaration ( but T = BRet = ARet ??? )
  26. return 42;
  27. }
  28.  
  29. template<typename T>
  30. typename B<T>::BRet B<T>::bar() { // OK
  31. return 42;
  32. }
  33.  
  34. template<typename T>
  35. auto B<T>::bar() -> BRet {
  36. return 42;
  37. }
  38.  
  39. template<>
  40. struct A<int> {
  41. using ARet = void;
  42. //...
  43. };
Add Comment
Please, Sign In to add comment