#include <iostream>
#include <type_traits>
using namespace std;

template <class T>
class I
{
public:
    virtual auto write(const T&) -> typename std::enable_if<std::is_copy_constructible<T>::value>::type=0;
};

template <class T>
class J: public I<T>
{
public:
    auto write(const T& p) -> typename std::enable_if<std::is_copy_constructible<T>::value>::type {
    	cout<<"write "<<p<<endl;
    };
};


int main() {
	J<int> x;
	x.write(5);
	//J<int&&> y;
	//y.write(10)
	return 0;
}