Все конструкторы 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};
}
Действительно ли возможно создать тип span constexpr, так как кажется, что конструкторы никогда не могут быть оценены во время компиляции, когда они должны инициализировать указатель или ссылку?
Раскомментируйте constexprs, не удаляйте их.
—
Андреас Loanjoe
Вы инициализируете промежуток времени выполнения, который я имел в виду для инициализации промежутка constexpr
—
Andreas Loanjoe
Doh. Не уверен, почему я это сделал. фигу
—
NathanOliver
странно, не понимаю, почему это было бы необходимо, ведь промежуток живет только внутри локальной области видимости ...
—
Andreas Loanjoe
Близко связаны: stackoverflow.com/q/57545503/2069064
—
Барри