如何在clang 3.4中使用make_unique

How to use make_unique in clang 3.4?

本文关键字:make unique clang      更新时间:2023-10-16

使用Travis-CI我正在尝试构建一个使用std::make_unique的C++项目。然而,我得到了一个构建错误:

no member named 'make_unique' in namespace 'std'
            mFiles.emplace_back(std::make_unique<File>(*this, rec));

我已经包含了memory,这段代码在VS2013和GCC4.8中使用-std=c++14编译。如果我在clang 3.4中使用这个标志,我会得到一个错误:

error: invalid value 'c++14' in '-std=c++14'

根据叮当文件:

http://clang.llvm.org/cxx_status.html

我应该使用-std=c++1y,但这仍然生成相同的no member named 'make_unique' in namespace 'std'。那么我该如何让它发挥作用呢?

这不取决于编译器,而是取决于标准库实现。std::make_unique不是一个核心语言特性,而是一个库函数。

检查Travis使用的libstdc++版本。


根据GCC 4.9变更日志,std::make_unique是在GCC 4.9发布时引入libstdc++的。

如果Travis使用的是4.9之前的GCC版本,那么它的libstdc++版本很可能还没有std::make_unique