Использование sizeof в реализации QScopedPointer

Чтобы понять, как Qt предотвращает неполный тип, я прошел через файл заголовка qscopedpointer.hСвязанная часть выглядит следующим образом:

template <typename T>
struct QScopedPointerDeleter
{
static inline void cleanup(T *pointer)
{
// Enforce a complete type.
// If you get a compile error here, read the section on forward declared
// classes in the QScopedPointer documentation.
typedef char IsIncompleteType[ sizeof(T) ? 1 : -1 ];
(void) sizeof(IsIncompleteType);

delete pointer;
}
};

Я знаю при использовании sizeof по неполному типу компиляция не удастся. Но при чем тут массив и второй sizeof делать? Разве одного sizeof недостаточно?

1

Решение

Используется массив, поэтому его отрицательный размер приведет к ошибке времени компиляции. Вторая строка гарантирует, что компилятор не может пропустить оценку sizeof(T) путем обеспечения фактического размера IsIncompleteType используется.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]