我有以下简化,这有效:
// works:
template<typename NodeStructure>
struct ListNode {
NodeStructure *prev, *next;
};
template<typename NodeStructure, ListNode<NodeStructure> NodeStructure::*node>
struct ListBase {
NodeStructure *head, *tail;
};
struct N {
ListNode<N> node;
};
struct B {
ListBase<N, &N::node> base;
};
但这不起作用
template<typename NodeStructure>
struct List {
struct Node {
NodeStructure *prev, *next;
};
template<Node NodeStructure::*node>
struct Base {
NodeStructure *head, *tail;
};
};
struct N {
List<N>::Node node;
};
struct B {
List<N>::Base<&N::node> base; // ERROR: Invalid template argument, ¿why?
};
在实际代码中,列表模板接收更多模板参数并定义了一个附加类Iterator,问题是“为什么不起作用,我做错了什么?
OH NO是IDE问题!
在扫描嵌套模板参数时,Eclipse CDT /代码分析为误报。
感谢您的回答。
最佳答案
当检测代码分析错误时, eclipse CDT破坏建筑物。
解决方案:代码分析无效的模板参数已被禁用,并且报告了ojita错误