Рассмотрим следующий фрагмент кода для тестирования предстоящих C++, 17 деклараций разложения функции (ранее известный как структурированные привязок)Почему объявления разложения не могут быть constexpr?
#include <cassert>
#include <utility>
constexpr auto divmod(int n, int d)
{
return std::make_pair(n/d, n % d); // in g++7, also just std::pair{n/d, n%d}
}
int main()
{
constexpr auto [q, r] = divmod(10, 3);
static_assert(q == 3 && r ==1);
}
Это терпит неудачу на обоих г ++ 7-SVN и лязг-4.0-SVN с сообщением :
декларация разложения не может быть объявлен «constexpr»
сбросив constexpr
определение и меняющийся на регулярной assert()
работает как со mpilers.
Ни одна из работ РГ21 по этой функции не упоминает ключевое слово constexpr
, ни в позитиве, ни в отрицательном.
Вопрос: почему объявления о разложении не допускаются constexpr
? (кроме «потому что стандарт говорит так»).
ОК, поэтому поддержка 'constexpr' может быть добавлена в предстоящую встречу Kona? – TemplateRex
@TemplateRex: комментарии Национального органа являются официальными ответами на ИСО, и до официального релиза им необходимо будет ответить. Но предлагаемое изменение вполне может быть отклонено, например. если есть серьезные сомнения в непредвиденных побочных эффектах этих изменений. Тем не менее, если есть неочевидная причина, эта причина, вероятно, заслуживает внимания. – MSalters
@MSalters спасибо. Я был бы разочарован, если бы это не было принято. Я был бы еще один момент, чтобы помнить, что нельзя использовать при написании функций constexpr. – TemplateRex