16.47
template <typename F, typename T1, typename T2>
void filp(F f, T1&& t1, T2&& t2){
f(std::forward<T1>(t1),std::forward<T2>(t2));
}
void func_f(int& i, int&& j){
}
void func_g(int i, int j) {
}
int main() {
int i = 10;
filp(func_f, i, 42);
filp(func_g, i, 42);
for (;;);
return 0;
}
16.48
template <typename T>
string debug_rep(const T&t){
}
template <typename T>
string debug_rep(T*t) {
}
string debug_rep(const string&);
string debug_rep(char * p){
return debug_rep(string(p));
}
16.49
g(T);g(T*);g(T);g(T*)
f(T);f(const T*);f(T);f(const T*)
template <typename T>
void func_1649(T){
cout << "func_1649(T)" << endl;
}
template <typename T>
void func_1649(const T *) {
cout << "func_1649(const T *)" << endl;
}
template <typename T>
void func_g_1649(T) {
cout << "func_g_1649(T)" << endl;
}
template <typename T>
void func_g_1649(T *) {
cout << "func_g_1649(T *)" << endl;
}
int main() {
int i = 42, *p= &i;
const int ci =0, *p2=&ci;
func_g_1649(42); func_g_1649(p); func_g_1649(ci); func_g_1649(p2);
func_1649(42); func_1649(p); func_1649(ci); func_1649(p2);
for (;;);
return 0;
}
16.50
f(p)判断错误
f(p)更适配f(T),因为p是非const指针,可以被改变,所以f(const T *)是不适配的