Todos os construtores de std :: span são declarados constexpr, no entanto, não consigo fazer com que nenhum deles funcione em um contexto constexpr. Descomentar qualquer um dos constexpr abaixo resultará em um erro de compilação.
#include <array>
#include <span>
int main()
{
constexpr int carray[3] = { 0, 1, 2 };
constexpr std::array<int, 3> array{ 0, 1, 2 };
using S = std::span<const int, 3>;
/*constexpr*/ S span1{ array.data(), 3 };
/*constexpr*/ S span2{array.begin(), array.end()};
/*constexpr*/ S span3{carray};
/*constexpr*/ S span4{array};
}
É de fato possível criar um tipo de extensão constexpr, pois parece que os construtores nunca podem ser avaliados em tempo de compilação quando precisam inicializar um ponteiro ou referência?
Remova o comentário dos constexprs não os remova.
—
Andreas Loanjoe 20/11/19
Você está inicializando um tempo de execução tempo de eu quis inicializar uma extensão constexpr
—
Andreas Loanjoe
Doh. Não sei por que fiz isso. Nevermind
—
NathanOliver
estranho, não
—
entendo
Intimamente relacionados: stackoverflow.com/q/57545503/2069064
—
Barry