¿Por qué las declaraciones de descomposición no pueden ser constexpr?
Considere el siguiente fragmento para probar las próximas declaraciones de descomposición de características de C ++ 17 (anteriormente conocidas como enlaces estructurados)
#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);
}
Esto falla tanto en g ++ 7-SVN como en clang-4.0-SVN con el mensaje:
la declaración de descomposición no puede declararse 'constexpr'
Soltando elconstexpr
definición y cambio a un regularassert()
Funciona en ambos compiladores.
Ninguno de los documentos del WG21 sobre esta característica menciona elconstexpr
palabra clave, ni en lo positivo ni en lo negativo.
Pregunta: por qué no se permite que las declaraciones de descomposición seanconstexpr
? (aparte de "porque la Norma lo dice").