В функции 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++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Ошибка! Переменная contexpr должна быть инициализирована постоянным выражением contexpr
Anonymous » » в форуме C++ - 0 Ответы
- 23 Просмотры
-
Последнее сообщение Anonymous
-