В соответствии с этим ответом, по-видимому, нет веской причины, по которой структурированные привязки не могут быть constexpr, но стандарт по-прежнему запрещает его. В этом случае, однако, не следует запрещать использование структурированных привязок внутри функции constexpr? Рассмотрим простой фрагмент:
#include <utility>
constexpr int foo(std::pair<int, int> p) {
auto [a, b] = p;
return a;
}
int main() {
constexpr int a = foo({1, 2});
static_assert(a == 1);
}
Оба gcc и clang не вызывают сбоев в сборе код. Является ли код плохо сформированным в любом случае или это действительно разрешено?