我有以下简化,这有效:

// 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错误

07-28 12:20