Я пытаюсь использовать возвращаемое значение из постоянной функции Uniquesize () Внутри другой постоянной функции Uniquearra для объявления массива, но это приводит к ошибке компилятора, говоря, что Uniquesize () не является постоянным выражением. массив, который компилятор только что принимает.
Почему это происходит? Может ли кто-нибудь объяснить разницу в постоянных выражениях в этих контекстах?
См. Код ниже.template
consteval auto UniqueSize(Args&&... args)
{
std::vector v{std::forward(args)...};
std::sort(v.begin(), v.end());
auto newEnd = std::unique(v.begin(), v.end());
return std::distance(v.begin(), newEnd);
}
template
consteval auto UniqueArray(Args&&... args)
{
// Calling UniqueSize to determine the size of the array returned
constexpr auto sz = UniqueSize(std::forward(args)...);
std::array arr{};
std::vector v{std::forward(args)...};
std::sort(v.begin(), v.end());
auto newEnd = std::unique(v.begin(), v.end());
std::copy(v.begin(), v.end(), arr.begin());
return arr;
}
int main()
{
// This compiles fine
constexpr auto sz = UniqueSize(2, 3, 4, 4, 5, 5);
static_assert(sz == 4);
std::array array{};
// This gives an error complaining that `sz` inside UniqueArray is not a constant expression.
// auto arr = UniqueArray(2, 3, 4, 4, 5, 5);
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... om-another
Постоянная ошибка выражения, когда постоянная функция вызывается из другой ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Постоянная ошибка выражения, когда постоянная функция вызывается из другой
Anonymous » » в форуме C++ - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-