fork download
  1. #include <iostream>
  2. #include <type_traits>
  3.  
  4. struct A
  5. {
  6. void foo() { std::cout << "A::foo()\n" ; }
  7. void foo() const { std::cout << "A::foo() const\n" ; }
  8. };
  9.  
  10. template < typename T > struct B
  11. {
  12. void bar() { const_cast<T&>(data).foo() ; }
  13.  
  14. private: typename std::remove_const<T>::type data ;
  15. };
  16.  
  17. int main()
  18. {
  19. B<A> x ; x.bar() ; // A::foo()
  20.  
  21. B<const A> y ; y.bar() ; // A::foo() const
  22. }
  23.  
Success #stdin #stdout 0s 2896KB
stdin
Standard input is empty
stdout
A::foo()
A::foo() const