}
info = info.mid(pos + 1);
+ // remove trailing '*', '&' that are part of the return argument
+ while ((info.at(0) == '*')
+ || (info.at(0) == '&'))
+ info = info.mid(1);
+
// we have the full function name now.
// clean up the templates
while ((pos = info.lastIndexOf('>')) != -1) {
{
public:
enum Something { foo };
+ char c;
void func_void() { ADD("TestClass1::func_void"); }
int func_int() { ADD("TestClass1::func_int"); return 0; }
char func_char() { ADD("TestClass1::func_char"); return 0; }
signed char func_schar() { ADD("TestClass1::func_schar"); return 0; }
unsigned char func_uchar() { ADD("TestClass1::func_uchar"); return 0; }
+ char &func_Rchar() { ADD("TestClass1::func_Rchar"); return c; }
char *func_Pchar() { ADD("TestClass1::func_Pchar"); return 0; }
const char *func_KPchar() { ADD("TestClass1::func_KPchar"); return 0; }
const volatile char *func_VKPchar() { ADD("TestClass1::func_VKPchar"); return 0; }
func_char();
func_schar();
func_uchar();
+ func_Rchar();
func_Pchar();
func_KPchar();
func_VKPchar();
<< "unsigned char TestClass1::func_uchar()"
<< "TestClass1::func_uchar";
+ QTest::newRow("msvc_09a")
+ << "char &__thiscall TestClass1::func_Rchar(void)"
+ << "TestClass1::func_Rchar";
+ QTest::newRow("gcc_09a")
+ << "char& TestClass1::func_Rchar()"
+ << "TestClass1::func_Rchar";
+ QTest::newRow("clang_09a")
+ << "char &TestClass1::func_Rchar()"
+ << "TestClass1::func_Rchar";
+
QTest::newRow("msvc_10")
<< "char *__thiscall TestClass1::func_Pchar(void)"
<< "TestClass1::func_Pchar";
QTest::newRow("gcc_10")
<< "char* TestClass1::func_Pchar()"
<< "TestClass1::func_Pchar";
+ QTest::newRow("clang_10")
+ << "char *TestClass1::func_Pchar()"
+ << "TestClass1::func_Pchar";
QTest::newRow("msvc_11")
<< "const char *__thiscall TestClass1::func_KPchar(void)"
#ifdef QT_BUILD_INTERNAL
QFETCH(QString, funcinfo);
+// qDebug() << funcinfo.toLatin1();
QByteArray result = qCleanupFuncinfo(funcinfo.toLatin1());
QTEST(QString::fromLatin1(result), "expected");
#endif