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 に答える