AppleClang 13编译C++20代码报错:std中无jthread成员
编译错误:std::jthread 未定义的解决方法
问题场景
使用以下配置和代码编译时出现错误:
CMakeLists.txt
cmake_minimum_required(VERSION 3.14) project(LocksProject) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) add_executable(lock_example example.cpp)
example.cpp
#include <thread> #include <iostream> int main() { std::jthread {[] {std::cout << "Hi" << std::endl;}}; }
CMake输出
-- The C compiler identification is AppleClang 13.0.0.13000027 -- The CXX compiler identification is AppleClang 13.0.0.13000027
编译错误信息
error: no member named 'jthread' in namespace 'std'
std::jthread {[] {std::cout << "Hi" << std::endl;}};
解决方法
- 升级AppleClang版本:AppleClang 13对C20的支持不完整,
std::jthread是C20新增特性,需要AppleClang 14及以上版本才能原生支持。可通过升级Xcode来更新编译器版本。 - 替换为std::thread:若暂时无法升级编译器,将
std::jthread替换为std::thread,并手动调用join()管理线程生命周期,修改后的代码如下:#include <thread> #include <iostream> int main() { std::thread t {[] {std::cout << "Hi" << std::endl;}}; t.join(); } - 显式指定C++20编译选项:在CMakeLists.txt中添加额外编译参数,确保编译器明确启用C++20标准,修改后配置如下:
cmake_minimum_required(VERSION 3.14) project(LocksProject) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++20") add_executable(lock_example example.cpp)
内容的提问来源于stack exchange,提问作者mascai
相关产品推荐
相关产品推荐

