如何修复 lib libstdc++ 的 `std::variant`(来自 GCC 9.1)不适用于 Clang 8?
How to fix lib libstdc++'s `std::variant` (from GCC 9.1) not working with Clang 8?
MSYS2 的 GCC 包最近更新到 9.1,但 Clang 不喜欢它附带的新 <variant>
libstdc++ header。
编译以下简单程序时:
#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++.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++.1.0\variant:263:5: note: previous declaration is here
__get(_Variant&& __v) noexcept
^
1 error generated.
Here is the complete <variant>
header if you want to look at it.
在等待官方修复时,我按照 Clang 的建议做了,并将 noexcept
添加到 header。
到目前为止,似乎 有效。
这个解决方案会导致任何问题吗?我应该做点别的吗?
如果您知道它是 libstdc++ 错误还是 Clang 错误,则可加分。
修复正确。这是一个 libstdc++ 错误,请参阅 https://bugs.llvm.org/show_bug.cgi?id=41863 and https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90397
MSYS2 的 GCC 包最近更新到 9.1,但 Clang 不喜欢它附带的新 <variant>
libstdc++ header。
编译以下简单程序时:
#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++.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++.1.0\variant:263:5: note: previous declaration is here
__get(_Variant&& __v) noexcept
^
1 error generated.
Here is the complete <variant>
header if you want to look at it.
在等待官方修复时,我按照 Clang 的建议做了,并将 noexcept
添加到 header。
到目前为止,似乎 有效。
这个解决方案会导致任何问题吗?我应该做点别的吗?
如果您知道它是 libstdc++ 错误还是 Clang 错误,则可加分。
修复正确。这是一个 libstdc++ 错误,请参阅 https://bugs.llvm.org/show_bug.cgi?id=41863 and https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90397