Std::optional> не является constexpr?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Std::optional> не является constexpr?

Сообщение Anonymous »

Почему следующий метод не является constexpr?

Код: Выделить всё

constexpr std::optional test2(void) {
return std::nullopt;
}
Clang выдает следующую ошибку:

Код: Выделить всё

[build] /.../.cxx:223:47: error: constexpr function's return type 'std::optional' is not a literal type
[build]   223 | constexpr std::optional test2(void) {
[build]       |                                               ^
[build] /nix/store/fsb7lmhyy01flrnviwjfz3fgm53w990v-libcxx-18.1.7-dev/include/c++/v1/optional:582:7: note: 'optional' is not literal because it has base class '__optional_move_assign_base' of non-literal type
[build]   582 |     : private __optional_move_assign_base,
Я использую версию Clang: 18 и std=c++20
Может ли кто-нибудь дать мне несколько советов?
Я настроил свою среду с помощью nix, поэтому ошибка должна быть воспроизводимой:

Код: Выделить всё

{ pkgs ? import  {} }: pkgs.mkShell {
nativeBuildInputs = with pkgs.buildPackages; [
# system tools
zsh
git
openssl

# basic configuration
pkgs.llvmPackages_18.stdenv
pkgs.llvmPackages_18.libcxx
pkgs.llvmPackages_18.libcxxStdenv
pkgs.llvmPackages_18.bintools
pkgs.llvmPackages_18.clang-tools
cmake

# ...
];
}
Та же ошибка возникает при использовании класса или структуры вместо целого числа.

Подробнее здесь: https://stackoverflow.com/questions/787 ... -constexpr
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»