gpt4 book ai didi

c++ - 支持 C++17 的 AppleLLVM 9.1.0?还是 cmake/env 的问题?

转载 作者:太空宇宙 更新时间:2023-11-04 12:48:57 24 4
gpt4 key购买 nike

我一直在使用 AppleLLVM 9.1.0(clang-902.0.39.1) 开发 os X 10.13,示例如下

#include <experimental/optional>
#include <iostream>

template<typename T>
class p {
public:
T value;
p(T& t):value(t){}
p(T const& t):value(t){}
~p() = default;
};
template <typename T1, typename T2>
constexpr auto operator+(p<T1> const &lhs, p<T2> const &rhs) noexcept {
return p<decltype(lhs.value + rhs.value)>(lhs.value + rhs.value);
}
int main(int, char* []) {
p<int> v1(20);
p<int> v2(10);
auto v3 = v1+v2;
std::cout << v3.value <<std::endl;
return 0;
}

编译为

c++ -std=c++17 -o test test.cpp

它非常适合我只是尝试使用返回类型推导的新功能,如 N3638 中所述提出了一种书面风格

template<typename T> auto f(T t);

但是,当我准备在我的 CMake(3.11.1) 组织的项目中使用它时,有几个标志显示如下:

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_FLAGS "-Wall -fpermissive -Wno-unused-parameter -Werror")
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -ggdb3")
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -ggdb3 -DNDEBUG")

编译失败告诉我“没有尾随返回类型的‘自动’返回;推导的返回类型是 C++14 扩展”。我尝试了下一个标志也得到了相同的结果:

set(CMAKE_CXX_FLAGS "-std=c++17")

它看起来很像 CMake 在环境集上失败的问题,而我对我应该设置哪些 CMake 标志来启用这个新功能感到困惑?还是与编译器相关的问题?

最佳答案

抱歉各位。

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

绝对没问题。问题是由旧版本依赖库引起的,它使用了在 c++11 中弃用并在 c++17 中删除的“std::auto_ptr”(但仍可在 c++11 中编译),因此 CMakeLists 专用于 c+ +11 标准。问题解决了。而在我的ubuntu env中,老版本的库是通过apt-get更新的。

关于c++ - 支持 C++17 的 AppleLLVM 9.1.0?还是 cmake/env 的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49994762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com