<experimental any =“”>上的clang ++错误

时间:2016-09-06 15:19:28

标签: c++ clang

编译包含<experimental/any>的代码时出错。

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.

1 个答案:

答案 0 :(得分:1)

@chris中提到的comments

  

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

事实证明这是真的。 Clang 3.9仍然是实验性的,因此它使用实验标题,包括实验性C ++标准库。默认情况下,它由GCC提供,因此在GCC实现和Clang实现之间发生不兼容。