title: Copy constructor not called, but compiler complains that there's no
body: <p>Given the following code:</p>
  
  <pre><code>#include &lt;boost/noncopyable.hpp&gt;
  
  enum Error { ERR_OK=0 };
  
  struct Filter : private boost::noncopyable
  {
    Filter() {}
    virtual ~Filter() {}
  
    virtual int filter(int* data) const = 0;
  
  };
  
  struct  SpecialFilter : public Filter, private boost::noncopyable
  {
    inline SpecialFilter(unsigned int min, unsigned int max) : min(min), max(max) {}
    virtual ~SpecialFilter() {}
  
    virtual int filter(int* data) const
    {
      // ...
      return ERR_OK;
    }
  
    unsigned int min;
    unsigned int max;
  };
  
  struct AClass
  {
    AClass() {}
    AClass(const AClass&amp; other) {}
    ~AClass() {}
  
    int specialFilter(int channel, int minThreshold, int maxThreshold)
    {
      // ...
      return filter(channel, SpecialFilter(123, 321));
    }
  
    int filter(int channel, const Filter&amp; filter)
    {
      // ...
      return ERR_OK;
    }
  
  };
  </code></pre>
  
  <p>My compiler (GCC 4.2) complains:</p>
  
  <pre><code>- warning: direct base ‘boost::noncopyable_::noncopyable’ inaccessible in ‘SpecialFilter’ due to ambiguity
  - noncopyable.hpp: In copy constructor ‘Filter::Filter(const Filter&amp;)’:
  - noncopyable.hpp:27: error: ‘boost::noncopyable_::noncopyable::noncopyable(const boost::noncopyable_::noncopyable&amp;)’ is private
  - synthezised method first required here: [return filter(channel, SpecialFilter(123, 321));]
  </code></pre>
  
  <p>But I don't call the copy constructor!</p>