std :: spanのすべてのコンストラクターはconstexprと宣言されていますが、それらのいずれかをconstexprコンテキストで動作させることはできません。以下のconstexprのコメントを外すと、コンパイルエラーが発生します。
#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};
}
コンストラクターがポインターまたは参照を初期化する必要がある場合、コンストラクターはコンパイル時に評価できないように見えるので、実際にはconstexprスパン型を作成することは可能ですか?
constexprsはそれらを削除しないのでコメントを外します。
—
Andreas Loanjoe
あなたはconstexprスパンを初期化するつもりであるランタイムスパンを初期化しています
—
Andreas Loanjoe
どー。なぜそうしたのかわかりません。nevermind
—
NathanOliver
奇妙なことに、なぜそれが必要なのかわからないのですが、スパンがローカルスコープ内にのみ存在します...
—
Andreas Loanjoe