2014-01-23 4 views
6

C++ стандарт (github.com/cplusplus/draft) имеет time_t функции преобразования (std::chrono::system_clock::to_time_t и std::chrono::system_clock::from_time_t) для перечисленных в static и noexcept, но не constexpr.Почему std :: chrono :: system_clock :: to_time_t() not constexpr?

Учитывая, что практически все операции на time_point и duration являются constexpr (включая duration_cast и time_point_cast), я не могу думать о какой-либо причине, чтобы исключить их. Быстрый осмотр источников libstdC++ на моей локальной машине подтверждает, что эти функции реализованы как простые длительности/время_показа.

Есть ли причина, по которой эти две функции не должны быть constexpr? Это просто случай «потому что никто не предложил, чтобы они были»?

ответ

3

Это просто случай «потому что никто не предложил, чтобы они были»?

Да, я думаю, что это точно.

Мне любопытно: Как только вы получите constexpr time_t, что вы собираетесь с ним делать? Ни одна из функций C, принимающих time_t, не является constexpr.

+0

У меня есть класс timestamp, который ранее использовал 'time_t' как внутреннее представление. В настоящее время он предлагает конструктор 'constexpr' из' time_t'. Теперь я хотел бы изменить внутреннее представление на 'time_point', но без' constexpr from_time_t' я буду вынужден удалить 'constexpr' из конструктора' time_t', который потенциально может сломать нисходящий пользовательский код. – marack

+0

@marack: Я вижу. Да, это разочаровывает. У меня было бы очень искушение просто принять общую, но неуказанную эпоху и представление, и просто свернуть свою собственную конверсию constexpr. Это достаточно просто, как вы уже отметили: 'system_clock :: time_point (seconds (time_t_value));'. Вы также можете подать отчет о дефекте библиотеки, следуя инструкциям здесь: http://cplusplus.github.io/LWG/lwg-active.html#submit_issue. –

Смежные вопросы