Подтвердить что ты не робот

Почему std:: tie не отмечен constexpr для С++ 14?

Это следующий вопрос к моим предыдущим вопросам "Какие части стандартной библиотеки С++ 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С++!

4b9b3361

Ответ 1

В любом случае, когда он использовал бы constexpr ness, make_tuple должен вести себя точно так же, как tie, за исключением того, что по существу tie добавит дополнительный уровень ненужной косвенности из ссылок. Таким образом, нет необходимости в tie быть constexpr, поскольку make_tuple будет служить этой цели.