NodePtr(T *n = 0): node(n) { }
NodePtr(const NodePtr &p): node(clone(p.node)) { }
NodePtr &operator=(const NodePtr &p) { delete node; node = clone(p.node); return *this; }
+#if __cplusplus>=201103L
+ NodePtr(NodePtr &&p): node(p.node) { p.node = 0; }
+ NodePtr &operator=(NodePtr &&p) { delete node; node = p.node; p.node = 0; return *this; }
+#endif
~NodePtr() { delete node; }
private:
struct Conditional: Node
{
- Expression *condition;
+ NodePtr<Expression> condition;
Block body;
Block else_body;