constexpr: definición y declaración para miembros constexpr
Si quiero usar algunas cosas de conveniencia comomake_array
No tengo oportunidad de declarar mi matriz primero y luego hacer la definición como se hizo en tiempos "anteriores" porque el tipo de mi var no está disponible antes de la definición.
Entonces encontré esta respuesta:
Referencia indefinida a static constexpr char []
En el siguiente ejemplo, escribí esta solución que se compila bien con gcc y no estoy seguro de que este sea un código C ++ realmente válido, porque es más o menos una declaración con definición y luego una definición sin contenido. ¿Esto está permitido? (Compilar bien no es una garantía de que el código sea válido en c ++)
#include <experimental/array>
#include <iostream>
class Foo
{
private:
static decltype(auto) constexpr Bar =
std::experimental::make_array(
std::experimental::make_array( 1,2,3 ),
std::experimental::make_array( 4,5,6 )
);
public:
using ARR_TYPE = decltype( Bar );
static auto& GetArr( int idx )
{
// range check ...
return Bar[idx];
}
};
constexpr Foo::ARR_TYPE Foo::Bar;
int main()
{
for ( auto el: Foo::GetArr(0))
{
std::cout << el << std::endl;
}
}