В функции get_stream_container_status, если использование переменной contexpr bool, компилятор дает ошибку в отношении «stream_container», не является постоянным выражением. Но вызовите функцию в кортеже и без переменной, она успешно компилируется. < /P>
get_stream_container_statustemplate
constexpr std::tuple get_stream_container_status(const Tuple& stream_container) {
constexpr bool is_contain_move_stream = contains_enum(stream_container, StreamType::kMoveStream);
constexpr bool is_contain_compute_stream = contains_enum(stream_container, StreamType::kComputeStream);
return std::make_tuple(
is_contain_move_stream,
is_contain_compute_stream
);
}
< /code>
Сообщение об ошибке: < /p>
: In instantiation of 'constexpr std::tuple get_stream_container_status(const Tuple&) [with Tuple = std::tuple]':
:38:63: required from here
:22:20: error: 'stream_container' is not a constant expression
22 | constexpr bool is_contain_move_stream = contains_enum(stream_container, StreamType::kMoveStream);
| ^~~~~~~~~~~~~~~~~~~~~~
:23:20: error: 'stream_container' is not a constant expression
23 | constexpr bool is_contain_compute_stream = contains_enum(stream_container, StreamType::kComputeStream);
| ^~~~~~~~~~~~~~~~~~~~~~~~~
Compiler returned: 1
< /code>
get_stream_container_statustemplate
constexpr std::tuple get_stream_container_status(const Tuple& stream_container) {
return std::make_tuple(
contains_enum(stream_container, StreamType::kMoveStream),
contains_enum(stream_container, StreamType::kComputeStream)
);
}
< /code>
тестовый код: < /p>
#include
#include
#include
enum class StreamType : uint8_t {
kDefaultStream, // Default stream, cntlass will choose the best stream type
kMoveStream, // move stream
kComputeStream, // compute stream
};
template
constexpr bool contains_enum(const Tuple& tuple, T value) {
if constexpr (Index < std::tuple_size_v) {
return std::get(tuple) == value || contains_enum(tuple, value);
} else {
return false;
}
}
template
constexpr std::tuple get_stream_container_status(const Tuple& stream_container) {
constexpr bool is_contain_move_stream = contains_enum(stream_container, StreamType::kMoveStream);
constexpr bool is_contain_compute_stream = contains_enum(stream_container, StreamType::kComputeStream);
return std::make_tuple(
is_contain_move_stream,
is_contain_compute_stream
);
// return std::make_tuple(
// contains_enum(stream_container, StreamType::kMoveStream),
// contains_enum(stream_container, StreamType::kComputeStream)
// );
}
int main() {
constexpr auto stream = std::make_tuple(StreamType::kDefaultStream, StreamType::kMoveStream, StreamType::kComputeStream);
constexpr auto result = get_stream_container_status(stream);
std::cout
Подробнее здесь: https://stackoverflow.com/questions/795 ... r-function
Получить ошибку при использовании значения contexPR в функции contexpr ⇐ C++
Программы на C++. Форум разработчиков
1744201021
Anonymous
В функции get_stream_container_status, если использование переменной contexpr bool, компилятор дает ошибку в отношении «stream_container», не является постоянным выражением. Но вызовите функцию в кортеже и без переменной, она успешно компилируется. < /P>
get_stream_container_statustemplate
constexpr std::tuple get_stream_container_status(const Tuple& stream_container) {
constexpr bool is_contain_move_stream = contains_enum(stream_container, StreamType::kMoveStream);
constexpr bool is_contain_compute_stream = contains_enum(stream_container, StreamType::kComputeStream);
return std::make_tuple(
is_contain_move_stream,
is_contain_compute_stream
);
}
< /code>
Сообщение об ошибке: < /p>
: In instantiation of 'constexpr std::tuple get_stream_container_status(const Tuple&) [with Tuple = std::tuple]':
:38:63: required from here
:22:20: error: 'stream_container' is not a constant expression
22 | constexpr bool is_contain_move_stream = contains_enum(stream_container, StreamType::kMoveStream);
| ^~~~~~~~~~~~~~~~~~~~~~
:23:20: error: 'stream_container' is not a constant expression
23 | constexpr bool is_contain_compute_stream = contains_enum(stream_container, StreamType::kComputeStream);
| ^~~~~~~~~~~~~~~~~~~~~~~~~
Compiler returned: 1
< /code>
get_stream_container_statustemplate
constexpr std::tuple get_stream_container_status(const Tuple& stream_container) {
return std::make_tuple(
contains_enum(stream_container, StreamType::kMoveStream),
contains_enum(stream_container, StreamType::kComputeStream)
);
}
< /code>
тестовый код: < /p>
#include
#include
#include
enum class StreamType : uint8_t {
kDefaultStream, // Default stream, cntlass will choose the best stream type
kMoveStream, // move stream
kComputeStream, // compute stream
};
template
constexpr bool contains_enum(const Tuple& tuple, T value) {
if constexpr (Index < std::tuple_size_v) {
return std::get(tuple) == value || contains_enum(tuple, value);
} else {
return false;
}
}
template
constexpr std::tuple get_stream_container_status(const Tuple& stream_container) {
constexpr bool is_contain_move_stream = contains_enum(stream_container, StreamType::kMoveStream);
constexpr bool is_contain_compute_stream = contains_enum(stream_container, StreamType::kComputeStream);
return std::make_tuple(
is_contain_move_stream,
is_contain_compute_stream
);
// return std::make_tuple(
// contains_enum(stream_container, StreamType::kMoveStream),
// contains_enum(stream_container, StreamType::kComputeStream)
// );
}
int main() {
constexpr auto stream = std::make_tuple(StreamType::kDefaultStream, StreamType::kMoveStream, StreamType::kComputeStream);
constexpr auto result = get_stream_container_status(stream);
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79564258/get-error-when-using-a-constexpr-value-in-constexpr-function[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия