【问题标题】:clang++ error on <experimental/any><experimental/any> 上的 clang++ 错误
【发布时间】:2016-09-06 23:49:09
【问题描述】:

编译包含&lt;experimental/any&gt;的代码时出现错误。

main.cpp中的代码:

#include <experimental/any>
int main() { }

编译这个(clang 版本是 3.9):

clang++ main.cpp -o main -std=c++1z

编译后出错:

In file included from main.cpp:2:
/usr/lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/experimental/any:364:34: error: 
      no template named '__any_caster'; did you mean 'any_cast'?
        return static_cast<_ValueType*>(__any_caster<_ValueType>(__any));
                                        ^
/usr/lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/experimental/any:361:30: note: 
      'any_cast' declared here
    inline const _ValueType* any_cast(const any* __any) noexcept
                             ^
/usr/lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/experimental/any:372:34: error: 
      no template named '__any_caster'; did you mean 'any_cast'?
        return static_cast<_ValueType*>(__any_caster<_ValueType>(__any));
                                        ^
/usr/lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/experimental/any:369:24: note: 
      'any_cast' declared here
    inline _ValueType* any_cast(any* __any) noexcept
                       ^
2 errors generated.

【问题讨论】:

  • 您可以尝试使用 libc++。也许在 libstdc++ 的新标头中与 Clang 不兼容。
  • 有一个manual page 。你可以传-stdlib=libc++

标签: c++ clang


【解决方案1】:

正如@chris 中提到的comments

您可以尝试使用 libc++。也许在 libstdc++ 的新标头中与 Clang 不兼容。

事实证明这是真的。 Clang 3.9 仍然是实验性的,所以它使用实验性的头文件,包括一个实验性的 C++ 标准库。默认情况下,它是由 GCC 提供的,所以 GCC 实现和 Clang 实现不兼容。

【讨论】:

    猜你喜欢
    • 2017-10-22
    • 1970-01-01
    • 2022-12-28
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    相关资源
    最近更新 更多