Ensure that qCleanupFuncinfo works with some C++11 new constructs
This commit adds tests for ref-qualified member functions, the new syntax for functions and decltype. __PRETTY_FUNCTION__ for lambdas varies wildly between compilers and will produce really bizarre results after cleanup. It's not tested and is known to be broken. Change-Id: I70c8dbcba54790357cecba35aa45c5cc672f29d1 Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
This commit is contained in:
parent
65ade55c8c
commit
e319196f76
@ -1,5 +1,6 @@
|
|||||||
CONFIG += testcase parallel_test
|
CONFIG += testcase parallel_test
|
||||||
CONFIG -= app_bundle debug_and_release_target
|
CONFIG -= app_bundle debug_and_release_target
|
||||||
|
contains(QT_CONFIG, c++11): CONFIG += c++11 c++14
|
||||||
TARGET = ../tst_qlogging
|
TARGET = ../tst_qlogging
|
||||||
QT = core testlib
|
QT = core testlib
|
||||||
SOURCES = ../tst_qlogging.cpp
|
SOURCES = ../tst_qlogging.cpp
|
||||||
|
@ -242,6 +242,26 @@ public:
|
|||||||
int &operator--() { ADD("TestClass1::operator--"); return x; }
|
int &operator--() { ADD("TestClass1::operator--"); return x; }
|
||||||
int operator--(int) { ADD("TestClass1::operator--"); return 0; }
|
int operator--(int) { ADD("TestClass1::operator--"); return 0; }
|
||||||
|
|
||||||
|
#ifdef Q_COMPILER_REF_QUALIFIERS
|
||||||
|
int lvalue() & { ADD("TestClass1::lvalue"); return 0; }
|
||||||
|
int const_lvalue() const & { ADD("TestClass1::const_lvalue"); return 0; }
|
||||||
|
int rvalue() && { ADD("TestClass1::rvalue"); return 0; }
|
||||||
|
int const_rvalue() const && { ADD("TestClass1::const_rvalue"); return 0; }
|
||||||
|
#endif
|
||||||
|
#ifdef Q_COMPILER_DECLTYPE
|
||||||
|
int decltype_param(int x = 0, decltype(x) = 0) { ADD("TestClass1::decltype_param"); return x; }
|
||||||
|
template<typename T> int decltype_template_param(T x = 0, decltype(x) = 0)
|
||||||
|
{ ADD("TestClass1::decltype_template_param"); return x; }
|
||||||
|
template<typename T> void decltype_template_param2(T x, decltype(x + QString()))
|
||||||
|
{ ADD("TestClass1::decltype_template_param2"); }
|
||||||
|
# ifdef Q_COMPILER_AUTO_FUNCTION
|
||||||
|
auto decltype_return(int x = 0) -> decltype(x)
|
||||||
|
{ ADD("TestClass1::decltype_return"); return x; }
|
||||||
|
template <typename T> auto decltype_template_return(T x = 0) -> decltype(x)
|
||||||
|
{ ADD("TestClass1::decltype_template_return"); return x; }
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TestClass1()
|
TestClass1()
|
||||||
{
|
{
|
||||||
@ -287,6 +307,22 @@ public:
|
|||||||
operator++(0);
|
operator++(0);
|
||||||
operator--();
|
operator--();
|
||||||
operator--(0);
|
operator--(0);
|
||||||
|
|
||||||
|
#ifdef Q_COMPILER_REF_QUALIFIERS
|
||||||
|
lvalue();
|
||||||
|
const_lvalue();
|
||||||
|
std::move(*this).rvalue();
|
||||||
|
std::move(*this).const_rvalue();
|
||||||
|
#endif
|
||||||
|
#ifdef Q_COMPILER_DECLTYPE
|
||||||
|
decltype_param();
|
||||||
|
decltype_template_param(0);
|
||||||
|
decltype_template_param2(QByteArray(), QString());
|
||||||
|
# ifdef Q_COMPILER_AUTO_FUNCTION
|
||||||
|
decltype_return();
|
||||||
|
decltype_template_return(0);
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user