class noncopyable
{
protected:
  noncopyable() {}
  ~noncopyable() {}
private:  // emphasize the following members are private
  noncopyable( const noncopyable& );
  const noncopyable& operator=( const noncopyable& );
};

class D : noncopyable
{
    public:
        D() { }
        D(const D&) { }
};

int main()
{
    D a;
    D b(a);

    return 0;
}