#include #include using namespace std; template void g(const T& t); template class wrapper { const T t; public: wrapper(const T& initial_t = T()): t(initial_t) {} friend void f(const T& t); friend void g(const T& t); template friend void h(const T& t); }; inline void f(const int& i) {cout << wrapper(i).t << "\n";} template class wrapper; inline void f(const char& c) {cout << wrapper(c).t << "\n";} template inline void g(const T& t) {cout << wrapper(t).t << "\n";} template inline void h(const int& i) {cout << U(wrapper(i).t) << "\n";} template inline void h(const char& c) {cout << U(wrapper(c).t) << "\n";} int main() { cout << boolalpha << fixed; f(10); f('A'); g(20); h(30); h('B'); return EXIT_SUCCESS; }