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 span 유형을 생성하는 것이 실제로 가능합니까? 생성자가 포인터 또는 참조를 초기화해야 할 때 컴파일 타임에 평가할 수없는 것처럼 보이기 때문에?
constexprs의 주석 처리를 제거해도 제거되지 않습니다.
—
Andreas Loanjoe
constexpr 범위를 초기화하려는 런타임 범위를 초기화하는 중입니다.
—
Andreas
도 내가 왜 그랬는지 모르겠습니다. nevermind
—
NathanOliver
이상한, 그것이 왜 필요한지 모르겠다. 스팬은 어쨌든 로컬 스코프 내부에만 살고있다.
—
Andreas Loanjoe
밀접하게 관련 : stackoverflow.com/q/57545503/2069064
—
Barry