c++ - clang 3.4 C++14 支持

标签 c++ c++14 clang++

我正在使用 travis.ci对我的 git 存储库进行自动化测试构建。

对于 Linux,他们使用:Ubuntu 12.04
使用 clang 3.4

根据clang page Clang 3.4 支持所有 C++ 14 语言功能(只要您使用 -std=c++1y 标志)。

到目前为止一切顺利:
我还需要使用 std::index_sequence<t0,...,tn>这是图书馆的特色 N3658不是语言功能。但是我找不到任何关于为 clang 更新 C++ 标准库以确保支持此功能的特定文档(不支持开箱即用)。

测试代码:

#include <utility>
int main() {
    std::index_sequence<1,2,3,4>    seq;
}

测试构建:

> clang++ -std=c++1y pl.cpp
pl.cpp:3:10: error: no member named 'index_sequence' in namespace 'std'
    std::index_sequence<1,2,3,4>    seq;
    ~~~~~^
pl.cpp:3:37: error: use of undeclared identifier 'seq'
    std::index_sequence<1,2,3,4>    seq;
                                    ^
2 errors generated.

更新:

根据下面的建议,我尝试使用 libc++。
很确定我做错了什么,但我从未尝试过使用替代标准库,所以我不确定这里出了什么问题。今晚将挖掘。但如果您有任何建议,请发表评论。

> sudo apt-get install -qq libc++1 libc6 libc++-dev

> clang++ -stdlib=libc++ pl.cpp
pl.cpp:1:10: fatal error: 'utility' file not found
#include <utility>
         ^
1 error generated.

最佳答案

嗯,答案似乎是安装 g++-4.9 这会将已安装的标准库更新到 clang 能够编译代码的程度。

sudo apt-get install python-software-properties
sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install g++-4.9

## Because I also use llvm-cov from my makefile
## I have to make sure it is in the path.
a=$(sudo find / -name llvm-cov | head -1)
sudo ln -s ${a} /usr/bin/llvm-cov

这就是我添加到 travis.yml 文件中的内容

before_install:
    - if [ "$TRAVIS_OS_NAME" == "linux" -a "$CXX" == "clang++" ]; then sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test;fi
    - if [ "$TRAVIS_OS_NAME" == "linux" -a "$CXX" == "clang++" ]; then sudo apt-get update;fi
    - if [ "$TRAVIS_OS_NAME" == "linux" -a "$CXX" == "clang++" ]; then sudo apt-get install g++-4.9;fi
    - if [ "$TRAVIS_OS_NAME" == "linux" -a "$CXX" == "clang++" ]; then a=$(sudo find / -name llvm-cov | head -1);sudo ln -s ${a} /usr/bin/llvm-cov;fi

在我合并我的 g++ 和 clang++ 预构建代码之后:

before_install:
    - if [ "$TRAVIS_OS_NAME" == "linux"];                         then sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y;fi
    - if [ "$TRAVIS_OS_NAME" == "linux"];                         then sudo apt-get update;fi
    - if [ "$TRAVIS_OS_NAME" == "linux"];                         then sudo apt-get install -qq g++-4.9;fi
    - if [ "$TRAVIS_OS_NAME" == "linux" -a "$CXX" == "g++" ];     then sudo update-alternatives --install /usr/bin/gcc  gcc  /usr/bin/gcc-4.9  90;fi
    - if [ "$TRAVIS_OS_NAME" == "linux" -a "$CXX" == "g++" ];     then sudo update-alternatives --install /usr/bin/g++  g++  /usr/bin/g++-4.9  90;fi
    - if [ "$TRAVIS_OS_NAME" == "linux" -a "$CXX" == "g++" ];     then sudo update-alternatives --install /usr/bin/gcov gcov /usr/bin/gcov-4.9 90;fi
    - if [ "$TRAVIS_OS_NAME" == "linux" -a "$CXX" == "clang++" ]; then a=$(sudo find / -name llvm-cov | head -1);sudo ln -s ${a} /usr/bin/llvm-cov;fi

关于c++ - clang 3.4 C++14 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30714175/

相关文章:

c++ - Typedef 在 CRTP 中创建一个(假的)派生类 - 不可能吗?

c++ - std::launder alternative pre c++17

c++ - 有条件的平凡析构函数

c++ - 在 Windows 上使用 clang 编译 CUDA 时的重新定义

c++ - 使用 libcurl 和 SSL

c++ - 从 C++ 程序刻录 CD/DVD

c++ - 从终端运行 C++ 程序。在同一终端窗口中获​​取输出

javascript - 如何将 Canvas 像素数组传递给 C++ 代码并将其保存为 jpeg?

c++ - 如果语句包含宏,则 clang 无法替换语句

c++ - std::fill 的 Clang 静态参数导致链接器失败