<segment_tree.hpp>
#include<vector>
#include<functional>
namespace dodam{
template<typename T> using Operator_type = std::function<T(T, T)>;
template<typename T=int>
class SegmentTree{
public:
explicit SegmentTree() = delete;
explicit SegmentTree(const size_t& size, const Operator_type<T>& op);
explicit SegmentTree(const size_t& size, Operator_type<T>&& op = std::plus<T>{});
explicit SegmentTree(const SegmentTree<T>& obj);
explicit SegmentTree(SegmentTree<T>&& obj);
~SegmentTree();
SegmentTree& operator=(const SegmentTree<T>& obj);
SegmentTree& operator=(SegmentTree<T>&& obj);
private:
std::vector<T> tree;
size_t size;
Operator_type<T> op;
};
};
<segment_tree.cpp>
#include"segment_tree.hpp"
#include<vector>
#include<functional>
#include<algorithm>
#include<memory>
using namespace dodam;
template<typename T>
SegmentTree<T>::SegmentTree(const size_t& size, Operator_type<T>&& op):tree(std::vector<T>(4*size+1)),size(size), op(std::move<Operator_type<T>>(op)){}
template<typename T>
SegmentTree<T>::SegmentTree(const size_t& size, const Operator_type<T>& op):tree(std::vector<T>(4*size+1)), size(size), op(op){}
template<typename T>
SegmentTree<T>::SegmentTree(const SegmentTree<T>& obj):tree(obj.tree),size(obj.size),op(obj.op){}
template<typename T>
SegmentTree<T>::SegmentTree(SegmentTree<T>&& obj):tree(std::move(obj.tree)),size(obj.size),op(std::move(obj.op)){}
template<typename T>
SegmentTree<T>::~SegmentTree()=default;
template<typename T>
SegmentTree<T>& SegmentTree<T>::operator=(const SegmentTree<T>& obj){
tree = obj.tree;
size = obj.size;
op = obj.op;
return *this;
}
template<typename T>
SegmentTree<T>& SegmentTree<T>::operator=(SegmentTree<T>&& obj){
tree = std::move(obj.tree);
size = obj.size;
op = std::move(obj.op);
return *this;
}
I think I wrote all methods in cpp correctly.
But, Trying to make result, I recieved this error message.
I don't know why this happen..
What I miss?
Anyone help me?
Compiler : Clang++12