我有以下概念:
template<typename T, typename MsgType>
concept CanSend = requires(T obj)
{
{obj.send(std::declval<MsgType>())} -> std::same_as<void>;
};
template<typename Handler, typename... MessageTypes>
concept HandlerConcept = (CanSend<Handler, MessageTypes> && ...);
我想将其重写为等效概念
C
,以便clangd
能够找出C
有一个发送方法。现在,如果我写:
template<HandlerConcept<int> HandlerT>
void foo(HandlerT obj)
{
obj.send(5);
}
我的自动完成无法弄清楚
obj
有这个 send
方法。相比之下,clangd
is能够在以下代码片段中弄清楚,obj
有一个方法send()
...
template<CanSend<int> T>
void foo(T obj)
{
}
Clangd 基于概念的自动完成在现阶段还非常原始。在 https://github.com/clangd/clangd/issues/261 中完成了一些初步工作,此后就没有进一步的工作,因此该补丁中处理的任何简单情况都是当前有效的。
我鼓励您就不起作用的案例(如您问题中的案例)提交clangd问题,以告知/集中该领域未来任何潜在的工作。