Как инициализировать значение сторожевого узла для шаблона класса? - PullRequest
0 голосов
/ 03 июня 2018

Дано Node в Tree контейнере:

#include <iostream>

template <class T>
class Tree {
    struct Node {
        Node(T val) : left(new Node()), right(new Node()), val(val) { /* value node */ }
        Node() : left(nullptr), right(nullptr) { /* sentinal node */ }
        Node *left, *right;
        T val;
    };

public:
    T insert(T val) {
        Node node(val);
        return node.val;
    }
};

int main() {
    Tree<int> tree;
    std::cout << tree.insert(42);
}

Когда я создаю сторожевой узел, используя new Node(), он инициализирует член val, используя конструктор по умолчанию T().Однако T может не иметь конструктора по умолчанию.

Как создать сторожевой узел без вызова конструктора по умолчанию T?

...