Согласно C ++ 17 [class] / 6, для того чтобы класс был тривиальным, среди прочих требований, он должен иметь как минимум один не удаленный конструктор по умолчанию. Конструктор по умолчанию класса example
удален, поэтому example
не является тривиальным классом.
До C ++ 17 ситуация несколько менее ясна. Для тривиального класса требовалось иметь тривиальный конструктор по умолчанию, и было неясно, квалифицируется ли удаленный конструктор по умолчанию как тривиальный. Ричард Смит спросил в CWG 1928 , являются ли специальные функции-члены, которые по умолчанию и неявно удалены, тривиальными. Комитет ответил:
CWG считает, что тривиальность удаленной функции не имеет значения. Любые случаи, когда тривиальность удаленной функции является наблюдаемой, должны быть исправлены, чтобы удалить эту зависимость.
Впоследствии решение CWG 1496 решило эту проблему в случае тривиальной классы: больше не имеет значения, квалифицируется ли удаленный конструктор по умолчанию как тривиальный, потому что в C ++ 17 определение говорит, что все конструкторы по умолчанию (если их несколько) должны быть либо тривиальными, либо удалено и по крайней мере одно должно быть не удалено.
Кажется, что G CC и Clang, возможно, рассматривали удаленные конструкторы по умолчанию как тривиальные и не были обновлены с C ++ 17 определение понятия «тривиальный класс». Вы должны подавать сообщения об ошибках.