clang ++和g ++的is_trivially_copyable / constructible等支持

时间:2014-07-11 07:43:42

标签: gcc c++11 clang typetraits libstdc++

iso 20.9.4.3类型属性[meta.unary.prop]不受g ++的libstdc ++ - v3完全支持; e.g:

wget -O - https://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/include/std/type_traits 2>/dev/null | grep "still unimplemented"


  // is_trivially_copyable (still unimplemented)
  /// is_trivially_constructible (still unimplemented)
  /// is_trivially_default_constructible (still unimplemented)
  /// is_trivially_copy_constructible (still unimplemented)
  /// is_trivially_move_constructible (still unimplemented)
  /// is_trivially_assignable (still unimplemented)
  /// is_trivially_copy_assignable (still unimplemented)
  /// is_trivially_move_assignable (still unimplemented

因此,至少据我所知,基于gcc安装的clang构建将继承这种缺乏实现;至少

clang version 3.5.0 (212792)

我几个小时前用

制作
g++ (Debian 4.8.3-3) 4.8.3

(但不过以某种方式使用gcc-4.9包括)不支持提到的那些类型特征。


但不知何故Coliru http://coliru.stacked-crooked.com/

有一个clang安装,如果用

调用
clang++ -std=c++11 -stdlib=libc++  -O2 -Wall -Wextra -pedantic -pthread -pedantic-errors main.cpp -lm  -lsupc++  && ./a.out

编译,例如此

http://en.cppreference.com/w/cpp/types/is_constructible

没有抱怨的例子。

所以必须有编译或设置clang的方法,至少在Linux上有标题,这些标题也支持那些尚未由libstdc ++实现的类型特征。


另外,llvm有这个

http://libcxx.llvm.org/type_traits_design.html

总结编译,但我不知道如何使用那些“__”内在函数;他们显然不会住在std :: nor ::;

-

那么 - 如何在Linux上设置或配置最近的llvm / clang,以便clang ++拥有大部分可用的类型特征?

附录用于评论

clang++ -std=c++11 -stdlib=libc++  -O2 -Wall -Wextra -pedantic -pthread -pedantic-errors test_type_traits.cxx -lm  -lsupc++  

test_type_traits.cxx:1:10:

致命错误:找不到'iostream'文件     #包括              ^     生成1个错误。

1 个答案:

答案 0 :(得分:0)

只需安装libc ++ 完全

在这里 http://libcxx.llvm.org/

像魅力一样构建和安装,现在clang确实在调用

时具有那些类型特征
clang++ -std=c++11 -stdlib=libc++ <other arguments>