Oh, "conflicting types for parameter 'T' ('T2' vs. 'T1')". I'm surprised but it's a nice surprise. Finally something in c++ where safety is valued more than implicit dangerous magic.
C++'s type system has always been stricter than C's. Even the following, totally valid C program, is ill-formed C++
int* x = malloc(5 * sizeof (int));
because in C++ you cannot implicitly cast a void pointer.