Как исправить `libddc ++` `std :: option` (из GCC 9.1), не работающий с Clang 8? - PullRequest
2 голосов
/ 07 июня 2019

Пакет GCC MSYS2 был недавно обновлен до 9.1, но Clang не нравится новый заголовок <variant> libstdc ++, который входит в него.

При компиляции следующей простой программы:

#include <variant>

int main()
{
    std::variant<int, float> x;
}

Я получаю:

# clang++ -std=c++17 foo.cpp

In file included from foo.cpp:1:
Z:\...\msys2\mingw64\include\c++\9.1.0\variant:1559:55: error: '__get' is missing exception specification 'noexcept'
        friend constexpr decltype(auto) __detail::__variant::__get(_Vp&& __v);
                                                             ^
foo.cpp:5:30: note: in instantiation of template class 'std::variant<int, float>' requested here
    std::variant<int, float> x;
                             ^
Z:\...\msys2\mingw64\include\c++\9.1.0\variant:263:5: note: previous declaration is here
    __get(_Variant&& __v) noexcept
    ^
1 error generated.

Вот полный заголовок <variant>, если вы хотите посмотреть на него.

Пока я жду официального исправленияЯ сделал так, как предложил Clang, и добавил noexcept к заголовку.

Это , похоже, пока работает .

Может ли это решение вызвать проблемы?Должен ли я делать что-то еще?

Бонусные баллы, если вы знаете, это ошибка libstdc ++ или ошибка Clang.

1 Ответ

2 голосов
/ 07 июня 2019

Исправление верно.Это ошибка libstdc ++, см. https://bugs.llvm.org/show_bug.cgi?id=41863 и https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90397

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...