2

我有以下简化,这有效:

// 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?
};

在实际代码中,List 模板接收更多模板参数并定义了一个额外的类 Iterator,问题是¿为什么不工作,我做错了什么?


哦,不,是 IDE 问题!

扫描嵌套模板参数时 Eclipse CDT/代码分析误报。

感谢您的回答。

4

1 回答 1

1

eclipse CDT 在检测到代码分析错误时会破坏建筑物。解决方案:代码分析无效模板参数已被禁用并报告错误

https://bugs.eclipse.org/bugs/show_bug.cgi?id=407497

于 2013-05-08T07:53:54.523 回答