c++ (gcc)嵌套模板问题

C++ (gcc) Nested template issue?

本文关键字:问题 嵌套 gcc c++      更新时间:2023-10-16

我有以下简化,这是有效的:

// 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,问题是为什么不工作,我做错了什么?


OH NO是IDE的问题!!

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

谢谢你的回答

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

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