Согласно [util.smartptr.weak.obs]/4, строгий слабый порядокweak_ptr::owner_before таков, что «два экземпляра Shared_ptr или Weak_ptr эквивалентны, если и только если они разделяют право собственности или оба пусты."
Однако я не вижу в стандарте ничего, что определяло бы, что значит, что слабый_ptr является пустым. Очевидно, что слабый_ptr, созданный по умолчанию, пуст, а слабый_ptr, созданный на основе пустого общего_ptr, пуст, но, похоже, явно не указано, истек ли срок действия слабого_птра пусто.
Подробнее здесь: https://stackoverflow.com/questions/732 ... -ptr-empty