Это следующий вопрос к моим предыдущим вопросам "Какие части стандартной библиотеки С++ 14 могут быть и какие части будут сделаны constexpr
?" и инструкции по перегрузке оператора constexpr
?
В мире выполнения приятная идиома для перегрузки operator<
для структуры нескольких членов данных заключается в использовании std::tie
для преобразования структуры в std::tuple
и копия на своем operator<
, который делает правильную вещь и торговлю; (лексикографическое сравнение с различными членами).
В С++ 14 многие части std::tuple
сделаны constexpr
, в частности make_tuple
, std::get
и ранее упомянутые operator<
. Тем не менее, похоже, что связанная с этим std::tie
не отмечена constexpr
. Это довольно раздражает, потому что он задает определяемые пользователем литералы, которые можно сравнить во время компиляции более подробно, чем необходимо.
Вопрос: существуют ли какие-либо технические причины, для которых std::tie
не помечены constexpr
для С++ 14?
UPDATE: LWG issue 2301, реализовано в libС++ и libstdС++ ошибка 65978
UPDATE2: исправлено @JonathanWakely чуть более 3 часов после отправки отчета об ошибке libstdС++!