class noncopyable {
public:
    noncopyable(noncopyable &&) noexcept;

    noncopyable &operator=(noncopyable &&) noexcept;

protected:
    noncopyable() = default;

    ~noncopyable() = default;

    noncopyable(const noncopyable &) = delete;

    noncopyable &operator=(const noncopyable &) = delete;
};

class C: noncopyable {
public:
	// compiles if this line is uncommented
	// C(C&& c);

	C() {}
	
	// also compiles if this is commented
	~C() {}
};

C a() {
	return {};
}

C b() {
	return a();
}

int main() {
	return 0;
}