ApplellVM 9.1.0具有C 17支持?还是CMAKE/ENV问题

AppleLLVM 9.1.0 with c++17 support? or was it a cmake/env issue?

本文关键字:CMAKE 还是 ENV 问题 17支持 0具 ApplellVM      更新时间:2023-10-16

我一直在使用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标志感到困惑以启用这一新功能?还是与编译器相关的问题?

Sry Guys。

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

效果绝对很好。问题是由一个旧版本的依赖库引起的,该库在C 11中使用了" std :: auto_ptr"并在C 17中删除(但是CMakelists中的C 11中仍在C 11中删除(,因此cmakelists专门用于C 11标准。问题解决了。在我的Ubuntu Env中,旧版本库由Apt-Get更新。