// { dg-do compile } namespace std { typedef __SIZE_TYPE__ size_t; } inline void* operator new(std::size_t, void* __p) throw() { return __p; } template class QTypeInfo { }; enum { Q_COMPLEX_TYPE = 0, Q_PRIMITIVE_TYPE = 0x1, Q_STATIC_TYPE = 0, Q_MOVABLE_TYPE = 0x2, Q_DUMMY_TYPE = 0x4 }; template class QFlags { int i; inline QFlags(Enum f) : i(f) { } }; class __attribute__((visibility("default"))) QSize { public: bool isEmpty() const; friend inline bool operator==(const QSize &, const QSize &); int wd; int ht; }; template<> class QTypeInfo { public: enum { isComplex = (((Q_MOVABLE_TYPE) & Q_PRIMITIVE_TYPE) == 0), isStatic = (((Q_MOVABLE_TYPE) & (Q_MOVABLE_TYPE | Q_PRIMITIVE_TYPE)) == 0), isLarge = (sizeof(QSize)>sizeof(void*)), isPointer = false, isDummy = (((Q_MOVABLE_TYPE) & Q_DUMMY_TYPE) != 0) }; }; class __attribute__((visibility("default"))) QBasicAtomicInt { public: inline bool operator!=(int value) const { } }; struct __attribute__((visibility("default"))) QListData { struct Data { QBasicAtomicInt ref; }; void **append(); }; template class QList { struct Node { void *v; }; union { QListData p; QListData::Data *d; }; public: void append(const T &t); inline void push_back(const T &t) { append(t); } void node_construct(Node *n, const T &t); void node_destruct(Node *n); }; template inline void QList::node_construct(Node *n, const T &t) { if (QTypeInfo::isLarge || QTypeInfo::isStatic) n->v = new T(t); else if (QTypeInfo::isComplex) new (n) T(t); } template inline void QList::node_destruct(Node *n) { } template void QList::append(const T &t) { if (d->ref != 1) { try { } catch (...) { } if (QTypeInfo::isLarge || QTypeInfo::isStatic) { } else { Node *n, copy; node_construct(©, t); try { n = reinterpret_cast(p.append());; } catch (...) { node_destruct(©); throw; } *n = copy; } } }; void virtual_hook(QSize sz, QList &arg) { arg.push_back(sz); }