#include <type_traits>
#include <iostream>
#include <memory>
struct Holder{
	virtual void inc() = 0;
	virtual ~Holder() {}
};
 
template<class T>
struct HolderHelper : Holder{
	HolderHelper(const T &t_) : t(t_){
 
	}
	void inc() final override{
		t++;
	}
	T t;
};
 
struct Test{
	template<class T>
	Test(T &&t) : up(new HolderHelper<T>(std::forward<T>(t))){ //wieso gibts kein std::make_unique?
		std::cout << "nicht const\n";
	}
	template<class T>
	Test(const T &t) : up(new HolderHelper<T>(t)){
		std::cout << "const\n";
	}
	std::unique_ptr<Holder> up;
};
 
int main() {
	int i = 42;
	Test t(i); //funktioniert wie es soll
	const int ci = 42;
	Test ct(ci); //funkitioniert nicht, weil T const ist
	//T soll aber nicht const sein, sondern ein normales int 
}