CLion(clang-tidy) + C++20协程
截至到现在2023年3月8日, CLion仍然不直接支持协程, 百度和谷歌上也无相关直白的解决方案, 急死个人. 今年都已经是2023年了, C++23都定稿了, CLion居然还不直接支持协程. 谷歌上关于CLion使用C++协程时出现错误的语法提示的bug的反馈已经open好多年了, 要是等到我买的个人的CLion许可证到期时, CLion还不修复这些bug, 劳资就不续费了🤯.
问题
目前在CLion中直接使用协程会弹出这个提示.
当前内置的clang-tidy版本为15.0.0. 网上稍微查找一下能找到16预览版本的clang-tidy. LLVM 16.0.0-rc3, 内有16.0.0版本的clang-tidy, 然而更换新版本的clang-tidy并不能解决协程语法提示不正确的问题. (我看多半可能还是CLion的问题).
解决方法
- 缺失
__cpp_impl_coroutine
宏
CLion does not appear to recognize that “__cpp_lib_coroutine” is defined.
在包含yvals_core.h头文件前手动定义__cpp_impl_coroutine
宏即可修复
该宏可以修复co_await运算符不可用的问题
(瞧这死傲娇clang-tidy, 还挺不情愿)
- clang-tidy自行定义
__clang__
宏导致ASIO_HAS_CO_AWAIT
未能设为1
编译器是MSVC, 语法高亮都能察觉到编译器是MSVC, 唯独clang-tidy傻乎乎地不能察觉.
这里有两种修复方法, 一种是手动移除__clang__
宏, 另一种是手动强制定义ASIO_HAS_CO_AWAIT
宏
个人推荐后者, 可以免修改asio源码.
总结
在包含一切头文件前用以下预编译指令修复一下即可
也可以放到修复性头文件里让所有源码首先包含一下