fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class A {};
  5. class B {};
  6.  
  7. class C {
  8. public:
  9.  
  10. template <typename T>
  11. void f() {
  12. // T = const B&
  13. impl_dispatch<T>(); // error: value-initialization of reference type ‘const B&’
  14. }
  15.  
  16. protected:
  17. virtual void impl(const A& a) {
  18. cout << "A";
  19. }
  20.  
  21. virtual void impl(const B& b) {
  22. cout << "B";
  23. }
  24. private:
  25. template <typename T>
  26. void impl_dispatch();
  27. };
  28.  
  29. template <> void C::impl_dispatch<A const &>()
  30. {
  31. impl(B());
  32. }
  33.  
  34. template <> void C::impl_dispatch<B const &>()
  35. {
  36. impl(A());
  37. }
  38.  
  39. int main() {
  40. C c;
  41. const B &b2 = B();
  42. c.f<decltype(b2)>(); // T = const B&
  43. return 0;
  44. }
Success #stdin #stdout 0s 3296KB
stdin
Standard input is empty
stdout
A